[ActionScript 3.0] AS3实现3D旋转
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.geom.PerspectiveProjection;
import flash.geom.Point;
import flash.geom.Vector3D;
import flash.utils.Timer;
import flash.utils.getDefinitionByName; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-8-13 下午4:03:27
*
*/
[SWF(width="1024",height="768")]
public class RotateMain extends Sprite
{
[Embed(source="assets/001.png")]
private var _img0:Class;
[Embed(source="assets/002.png")]
private var _img1:Class;
[Embed(source="assets/003.png")]
private var _img2:Class;
[Embed(source="assets/004.png")]
private var _img3:Class;
[Embed(source="assets/005.png")]
private var _img4:Class;
[Embed(source="assets/006.png")]
private var _img5:Class;
[Embed(source="assets/007.png")]
private var _img6:Class;
[Embed(source="assets/007.png")]
private var _img7:Class; private var _num:int = 7;
private var _radius:Number = 300;
private var _itemArr:Array = [];
private var _speed:Number = 1;
private var _ratio:Number = 0.25;//系数
private var _downX:Number;
private var _container:Sprite;
private var _timer:Timer = new Timer(20);
public function RotateMain()
{
this.graphics.beginFill(0,1);
this.graphics.drawRect(0,0,1024,768);
this.graphics.endFill();
initViews();
initEventListeners();
}
private function initViews():void
{
_container = new Sprite();
_container.x = 1024*0.5;
_container.y = 768*0.5-200;
_container.z = 0;
this.addChild(_container);
for(var i:int = 0;i<_num;i++){
var angle:Number = Math.PI * 2/_num*i;
var sp:Sprite = new Sprite();
//var img:Class = getDefinitionByName("RotateMain__img"+i) as Class;
var bmp:Bitmap = new this["_img"+i](); sp.x = Math.cos(angle)*_radius;
sp.z = Math.sin(angle)*_radius;
sp.addChild(bmp);
_container.addChild(sp);
_itemArr.push(sp);
}
swapItems();
_timer.addEventListener(TimerEvent.TIMER,onTimer);
_timer.start(); }
private function initEventListeners():void
{
stage.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
}
private function onDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
stage.addEventListener(MouseEvent.MOUSE_UP,onUp);
_timer.stop();
_downX = mouseX;
}
private function onMove(e:MouseEvent):void
{
_speed = (_downX-mouseX)*0.01;
_container.rotationY += _ratio * _speed;
var p:PerspectiveProjection = new PerspectiveProjection();
p.fieldOfView = 55;
p.projectionCenter = new Point(512,-100);
_container.transform.perspectiveProjection = p;
swapItems(); }
private function onUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMove);
stage.removeEventListener(MouseEvent.MOUSE_UP,onUp);
_timer.start();
}
private function onTimer(e:TimerEvent):void
{
if(_speed < -1){
_speed+=0.02;
if(_speed >=-1){
_speed = -1;
}
}else if(_speed >1){
_speed-=0.02;
if(_speed <=1){
_speed = 1;
}
}else if(_speed>-1&&_speed<0){
_speed-=0.02;
}else if(_speed<1&&_speed>0){
_speed+=0.02;
}
_container.rotationY += _ratio *_speed ;//trace(_ratio,_speed);
var p:PerspectiveProjection = new PerspectiveProjection();
p.fieldOfView = 55;
p.projectionCenter = new Point(512,-100) ; //视点
_container.transform.perspectiveProjection = p;
swapItems();
}
private function swapItems():void
{
_itemArr.sort(swapDepth);
for(var i:int = 0; i < _itemArr.length; i++ )
{
_container.addChildAt(_itemArr[i] as Sprite,i);
(_itemArr[i] as Sprite).rotationY -= _ratio *_speed;
}
}
private function swapDepth(objA:DisplayObject,objB:DisplayObject):int
{
var posA:Vector3D = objA.transform.matrix3D.position ;
posA = _container.transform.matrix3D.deltaTransformVector(posA);
var posB:Vector3D = objB.transform.matrix3D.position;
posB = _container.transform.matrix3D.deltaTransformVector(posB);
return posB.z - posA.z;
}
}
}
[ActionScript 3.0] AS3实现3D旋转的更多相关文章
- [ActionScript 3.0] as3处理xml的功能和遍历节点
as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...
- [ActionScript 3.0] AS3.0 动态加载显示内容
可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...
- [ActionScript 3.0] AS3 3D双圆环贴图
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...
- [ActionScript 3.0] AS3 3D星形贴图
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...
- [ActionScript 3.0] AS3.0和AS2.0的相互通信
AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...
- [ActionScript 3.0] AS3.0 本机鼠标指针
Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...
- [ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains
简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时 ...
- [ActionScript 3.0] AS3 深入理解Flash的 应用程序域Application Domains
简介 网上有很多flash,通常都不需要显示的使用应用程序域,因为默认的应用程序域就够用了.其实复杂的情况下需要用到应用程序域,比如说有两个不同的swf,一个是旧版本的,一个是新版的,这两个文件里的类 ...
- [ActionScript 3.0] AS3调用百度天气预报查询API
接口说明 根据经纬度/城市名查询天气的结果 接口示例 http://api.map.baidu.com/telematics/v3/weather?location=成都&output=jso ...
随机推荐
- Linux运维基础入门(一)网络基础知识梳理01
一,计算机网络参考模型 1.1 OSI七层模型 1)物理层 主要功能是完成相邻节点之间原始比特流的传输.(网卡等) 物理层协议关心的典型问题是使用什么样的物理信号来表示数据1和0:持续的时间有多长:数 ...
- redis 常用方法整理
1.进入redis redis-cli -p -h 192.168.0.100 -a q9pCeAEMAWEL 2.查询keys keys activity_mobile_* 3.赋值.查值.删除 s ...
- MonoBehaviour.print和Debug.Log是同样的作用
MonoBehaviour.print("identical------------------------");
- zabbix自动发现监控mysql
一. 数据库给只读权限 1.1 grant usage on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; flush privileges; ...
- p4688 [Ynoi2016]掉进兔子洞
传送门 分析 我们考虑先将所有数离散化 之后我们对于每个状态用一个bitset来记录 其中第i段表示颜色i的信息 对于每一段信息均是段首若干1,剩余若干0表示这种颜色有多少个 于是我们不难想到莫队 答 ...
- 提高你的Python能力:理解单元测试
对于程序开发新手来说,一个最常见的困惑是测试的主题.他们隐约觉得“单元测试”是很好的,而且他们也应该做单元测试.但他们却不懂这个词的真正含义.如果这听起来像是在说你,不要怕!在这篇文章中,我将介绍什么 ...
- spring.net 继承
. <object id="parent" type="Bll.Parent, HRABLL" > <property name=" ...
- bootstrap小图标引用方法
<span class="glyphicon glyphicon-search"></span> <span class="glyphico ...
- es学习-索引配置
1.创建一个新的索引并且添加一个配置 2.更新索引配置:(更新分词器为例子) 更新分词器前,一定要关闭索引,然后更新,最后再次开启索引 url:PUT http://127.0.0.1:9200/su ...
- Ceph介绍
1. 介绍 云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备.目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块 ...