2010-03-19 4 views
1

J'ai un objet MovieClip, qui est exporté pour actionscript (AS3) dans un fichier .swc. Lorsque je place une occurrence du clip sur la scène sans aucune modification, elle apparaît dans le coin supérieur gauche, à environ la moitié de la scène (c'est-à-dire que seul le quadrant inférieur droit de l'objet est visible). Je comprends que c'est parce que le clip a un point d'enregistrement qui est pas le coin supérieur gauche. Si vous appelez getBounds() sur le MovieClip, vous pouvez obtenir les limites du clip (vraisemblablement à partir du "point" sur lequel il est aligné) qui ressemble à quelque chose (gauche: -303, en haut: -100, droite: 303, en bas: 100), vous pouvez soustraire les valeurs gauche et en haut du clip x et y:Comment empêcher la traduction externe d'un objet movieclip sur scène dans AS3?

clip.x -= bounds.left; 
clip.y -= bounds.top; 

Cela semble aligner correctement le clip entièrement sur scène avec en haut à gauche du clip carrément dans le coin de la scène.

Mais! Suivre cette logique ne semble pas fonctionner quand on l'aligne au centre de la scène! Cela crée l'univers parallèle fou où le clip est maintenant en bas dans le coin inférieur droit de la scène.

Le seul indice que j'ai est que regarder:

clip.transform.matrix 

et

clip.transform.concatenatedMatrix 
  • matrice

    a une valeur de tx de 748 (la moitié de la hauteur de l'étape a) la valeur de ty de 426 (La moitié de la hauteur de la scène)

  • concaténée La matrice a une valeur tx de 1699,5 et une valeur ty de 967,75

C'est aussi évidemment là où le MovieClip est positionné, mais pourquoi? D'où vient cette traduction supplémentaire?

+0

Aha! Je viens de remarquer que l'objet parent a sa transformation d'échelle (via clip.parent.transform.concatenatedMatrix) définie sur une valeur qui, lorsqu'elle est multipliée par la valeur tx/ty du clip, produit la valeur dans la matrice concaténée. Maintenant, comment puis-je définir l'échelle de la matrice parent à 1? –

Répondre

1

Je crois que j'ai résolu le problème.

Il semble que lorsque la scène n'est pas réglée sur des dimensions spécifiques, l'échelle des objets (ou cet objet vectoriel particulier dans mon cas) sur la scène est relative à une certaine échelle/dimensions prédéfinies (L'origine de Je ne suis pas sûr - avec quelques tests on dirait qu'il est affecté par le rapport et les dimensions de la scène).

L'augmentation de la taille de la scène augmente cette valeur mise à l'échelle, qui, par une série de concaténations de matrices résultats dans le MovieClip se Scaled et convertis au même pourcentage (la scène), même si vous définir explicitement x/y/largeur/hauteur.

(Note: non seulement redimensionner dynamiquement Redimensionner la fenêtre, la fermeture et la réouverture de la fenêtre à cette nouvelle taille produit le même comportement.)

Je soupçonne que cela se produit uniquement avec des objets vectoriels?

Quoi qu'il en soit, le correctif consiste à définir la scène à une largeur et une hauteur explicites.Ensuite, la traduction et la mise à l'échelle de l'objet semblent utiliser une matrice parentale, et tout fonctionne comme prévu.

Questions connexes