2010-11-09 13 views
1

J'ai 2 DisplayObject, l'un contenant l'autre comme le code ci-dessous:rotation Actionscript sur 2 axes différent de 1 axe

var sprite1:Sprite = new Sprite();

sprite1.addChild(loader1); // assume that I have load picture on to loader1

loader1.rotationZ = 30;

sprite1.rotationZ = -30; Si je lance le code ci-dessus, l'image sur loader1 regardera comme il n » t été tourné du tout parce que son conteneur tourne dans la direction opposée. Ce qui est correct, comme ce que je m'attendais.

Mais, si j'avais rotation à axes multiples au code:

loader1.rotationZ = 30;

loader1.rotationY = 50;

sprite1.rotationZ = -30;

sprite1.rotationY = -50;

Maintenant, loader1 tourne dans angle différent. Ma question est la suivante: pourquoi cela ne se compense pas? Notez que les positions x, y, z de loader1 et de sprite1 sont toutes à 0,0,0. Et ce problème se produit indépendamment de la rotation X, Y ou Z. Si vous avez 1 axe, cela fonctionne très bien. 2 axes, ce ne sera pas.

Je poste cet exemple de code parce que j'essaie de comprendre comment Flash tourne en 3D. Dans le document AS3, il prétend qu'il tourne autour de son "conteneur parent 3D" Qu'est-ce que c'est?

+0

Je suis assez sûr que le problème ici a à voir avec la multiplication des matrices, ce qui peut être vraiment compliqué. J'espère que quelqu'un avec une connaissance plus large de la 3D sera en mesure de vous donner une réponse définitive. ne pouvez-vous pas charger vos images en tant qu'objets d'affichage indépendants placés au-dessus de vos sprites en rotation? – TheDarkIn1978

+0

Mon problème actuel est trop complexe pour expliquer ou mettre en place un exemple de code. Mais juste ce point qui cause les erreurs. Je voudrais comprendre comment cela fonctionne – ohm

Répondre

0

La rotation est relative au parent et lorsque vous faites pivoter l'objet parent, le cadre de référence de l'enfant sera modifié. Cela n'a pas d'importance lorsque vous ne faites que tourner autour d'un axe, mais fait une différence lorsque vous tournez autour de deux. Pour annuler les rotations, vous devez les annuler toutes dans l'ordre inverse de leur application. Essayez-le avec un livre, ou votre téléphone, en tournant de 90 degrés sur un axe, puis un second. Vous ne pouvez pas revenir à l'endroit où vous avez commencé et vous aurez toujours impliqué le 3ème axe.