答案 0 :(得分:2)
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>
正在做的工作是将“Animate”对象与两个“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函数不需要修改。
答案 1 :(得分:1)
就像你通常那样旋转物体。但是在3d空间中你必须使用: sprite.rotationY
确保您要导出10或更高版本的Flash,因为早期版本中不存在3d功能。