2010-07-09 10 views

Répondre

2

Flex est AS3. Flex compile jusqu'à actionscript. Souvent, c'est simplement un moyen déclaratif (par opposition à l'impératif) de faire avancer les choses.

Ainsi, la viande de cet exemple est dans les extraits de code:

 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> 

Qu'est-ce qui fait le travail est l'objet « Animer » en liaison avec les deux objets « Rotation3D ». Donc, pour que cela fonctionne en AS3 pur, la seule chose difficile à faire est de créer des liens vers les bibliothèques flexibles. En fonction de votre IDE, c'est assez facile à faire. De là, tout ce que vous avez à faire est de créer les objets que vous voulez, impérativement et non de manière déclarative. Ainsi, au lieu de faire des choses comme:

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

Vous devez faire:

var rotY:Number = 0; 


Une fois que vous savez que, la conversion de Flex AS3 et vice versa est assez simple. Le code flex traduit ressemblerait à quelque chose comme ce qui suit dans 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; 

Maintenant, c'est du haut de ma tête, regardant the Rotate3D API et en tapant dans cet éditeur de texte, donc je suis sûr que ce n'est pas parfait, mais il devrait vous donner une idée claire sur la façon d'avancer. Si vous avez besoin de plus d'aide, faites le moi savoir et je pourrais traduire plus de l'exemple.

J'espère que cela aide,

--gMale

EDIT: Comme je regarde le code, un autre point délicat est que les propriétés de angleYTo sont liés à rotY. Donc, pour que cela fonctionne vraiment, vous devez explicitement définir ces propriétés dans la fonction playEffect. Comme dans:

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

Sinon, vous pourriez imperatively create the data binding, ce qui est assez facile à faire. Ensuite, la fonction playEffect ne nécessiterait aucune modification.

1

C'est comme faire tourner l'objet comme vous le faites habituellement. Toutefois, dans l'espace 3D, vous devrez utiliser: sprite.rotationY

Assurez-vous que vous exportez pour le flash 10 ou ultérieur puisque la fonctionnalité 3d n'existe pas dans les versions antérieures.