使用ActionScript3旋转精灵

时间:2010-07-09 04:46:54

标签: actionscript-3

我想使用AS3在3d中旋转精灵。下面的示例讲述了如何使用MXML和AS3旋转图像,但是,我想通过纯AS3来完成:

Example

感谢

2 个答案:

答案 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功能。