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 не требует модификации.