[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 ...
随机推荐
- Ztree右键事件,如何让指定的子节点不显示右键菜单。
这里我记录一下我自己的解决方案: 1.首先在Ztree的setting设置中加一个鼠标右键回调函数onRightClick,然后在加一个beforeRightClick(具体含义可以看官方API) v ...
- LIS和LCS LCIS
首先介绍一下LIS和LCS的DP解法O(N^2) LCS:两个有序序列a和b,求他们公共子序列的最大长度 我们定义一个数组DP[i][j],表示的是a的前i项和b的前j项的最大公共子序列的长度,那么由 ...
- 案例研究:手机APP的UI设计流程
以下内容由Mockplus(http://www.mockplus.cn)团队翻译整理,仅供学习交流. UI设计——不仅仅是创造漂亮的图像. 面临的挑战 我为自己提供了一个绝佳的机会来训练我的视觉设计 ...
- centos7设置、查看、删除环境变量的方法
centos查看环境变量与设置环境变量在使用过程中很常见,本文整理了一些常用的与环境变量相关的命令,感兴趣的朋友可以参考下希望对你有所帮助 1. 显示环境变量HOME(红色部分代表要输入的命令,不要把 ...
- sql insert、update、delete完以后返回主键ID
以前只用过在insert完以后利用select @@IDENTITY返回主键ID,最近在做微信公众平台,遇到一个需求是在帮绑定万微信openid后自动完成登陆,这就需要update以后返回主键ID,查 ...
- 在IE9中检查up6.2配置
1.按F12,打开调试模式 2.打开脚本选项卡 说明:在脚本选项卡中可看到IE加载的脚本信息是否正确.因为IE有缓存,导致脚本有时不是最新的. 3.打开脚本,up6.js 4. ...
- 设计模式13---桥接模式(Bridge Pattern)
桥接模式将抽象与具体实现分离,使得抽象与具体实现可以各自改变互不影响.桥接模式属于设计模式中的结构模式. 桥梁模式涉及的角色 抽象(Abstraction)角色:抽象定义,引用对接口对象的引用. 重新 ...
- POJ 3581 Sequence(后缀数组)
Description Given a sequence, {A1, A2, ..., An} which is guaranteed A1 > A2, ..., An, you are to ...
- python3操作Excel openpyxl模块的使用
python 与excel 安装模块 本例子中使用的模块为: openpyxl 版本为2.4.8 安装方法请参看以前发表的文章(Python 的pip模块安装方法) Python处理Excel表格 使 ...
- C/C++学习的50个经典网站
C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码.这份清单提供了源代码的链接以及它们的小说明.我已尽力包括最佳的C/C++源代码的网站.这不是一个完整的清 ...