使用ActionScript3旋转精灵

问题描述:

我想使用AS3以3d旋转精灵。下面的例子,告诉你如何做旋转,使用MXML和AS3的图像,但是,我想通过纯粹的AS3做到这一点:使用ActionScript3旋转精灵

Example

感谢

Flex是AS3。 Flex编译到actionscript。通常,这只是一种声明(而不是必要)的方式来完成任务。

这样例子的肉中的代码片段:

 private function playEffect(target:Animate, angle:Number):void { 
      if (!target.isPlaying) { 
       rotY += angle; 
       target.play(); 
      } 
     } 

//snip... 

<fx:Declarations> 
    <fx:Number id="rotY">0</fx:Number> 
    <s:Rotate3D id="fxRotate3DNeg" target="{image}" angleYTo="{rotY}" 
       autoCenterTransform="true" /> 
    <s:Rotate3D id="fxRotate3DPos" target="{image}" angleYTo="{rotY}" 
       autoCenterTransform="true" /> 
</fx:Declarations> 

什么做的工作是与两个“ROTATE3D”对象一起在“动画”对象。所以为了让这个工作在纯粹的AS3中,唯一需要的难题就是链接到flex库。根据你的IDE,这很容易做到。

从那里你所要做的就是创建你想要的对象,强制性地而不是声明性地。因此,而不是做这样的事情:

<fx:Number id="rotY">0</fx:Number> 

你需要做的:

var rotY:Number = 0; 


一旦你知道,把从Flex中AS3,反之亦然是非常简单的。翻译的Flex代码看起来像在ActionScript如下:

import spark.effects.Rotate3D; 

var rotY:Number; 
var fxRotate3DNeg:Rotate3D; 
var fxRotate3DPos:Rotate3D; 

rotY = 0; 

fxRotate3DNeg = new Rotate3D(image);; //the constructor sets the "target" property 
fxRotate3DNeg.angleYTo = rotY; 
fxRotate3DNeg.autoCenterTransform = true; 

fxRotate3DPos = new Rotate3D(image); 
fxRotate3DPos.angleYTo = rotY; 
fxRotate3DPos.autoCenterTransform = true; 

现在,这把我的头顶部,在这个文本编辑器在the Rotate3D API和打字一眼,所以我敢肯定,它不是完美的,但它应该给你一个关于如何前进的清晰思路。如果您需要更多帮助,请告诉我,我可以翻译更多示例。

我希望帮助,

--gMale

编辑: 正如我在看代码,一个棘手的其他点是,angleYTo属性绑定到ROTY。所以为了真正做到这一点,你必须在playEffect函数中明确地设置这些属性。如在:

 private function playEffect(target:Animate, angle:Number):void { 
      if (!target.isPlaying) { 
       rotY += angle; 
       //manually set properties 
       fxRotate3DNeg.angleYTo = fxRotate3DPos.angleYTo = rotY; 
       target.play(); 
      } 
     } 

或者,你可以imperatively create the data binding,这很容易做到。然后,playEffect函数将不需要修改。

它就像您通常那样旋转物体。但是,在3D空间中,您将不得不使用: sprite.rotationY

请确保您正在为Flash 10或更高版本导出,因为3d功能在早期版本中不存在。