Поворот спрайта с помощью ActionScript3 - PullRequest
1 голос
/ 09 июля 2010

Я хочу вращать спрайт в 3d, используя AS3. В приведенном ниже примере рассказывается, как сделать поворот изображения с помощью MXML и AS3, однако я хочу сделать это с помощью чистого AS3:

* ** 1003 тысяча два * Пример

спасибо

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

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 и наоборот довольно прост. Переведенный гибкий код в 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;

Теперь это не в моей голове, взглянув на API Rotate3D и набрав в этом текстовом редакторе, так что я уверен, что он не идеален, но он должен дать вам четкое представление о том, как двигаться вперед. Если вам нужна дополнительная помощь, дайте мне знать, и я смогу перевести больше примеров.

Надеюсь, это поможет,

- gMale

EDIT: Когда я смотрю на код, еще один хитрый момент заключается в том, что свойства 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();
            }
        }

В качестве альтернативы, вы можете обязательно создать привязку данных , что довольно легко сделать. Тогда функция playEffect не требует модификации.

1 голос
/ 09 июля 2010

Это как вращение объекта, как обычно.Однако в трехмерном пространстве вам придется использовать: sprite.rotationY

Убедитесь, что вы экспортируете для flash 10 или более поздней версии, поскольку в более ранних версиях функция 3d не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...