2010-10-13 53 views

Répondre

1

ah, l'ancien problème du point d'enregistrement. :)

J'ai déjà vu une petite classe personnalisée qui vous permettait de changer le point d'alignement de votre objet d'affichage, comme vous pouvez le faire dans Flash Authoring. google around si vous êtes curieux.

la solution est plutôt facile, cependant. le point d'alignement des objets d'affichage est attribué en fonction de la manière dont l'objet est ajouté à la liste d'affichage. il vous suffit de tenir compte lors de votre ajoutez l'objet d'affichage à la liste d'affichage, puis mis en place un peu de mathématiques facile de changer le point d'enregistrement:

//Set up rect's width and height 
var rectWidth:uint = 200; 
var rectHeight:uint = 100; 

//Assign registration point (TL, TC, TR, CL, C, CR, BL, BC, BR = top, center, bottom, left, right) 
var registration:String = "C" 

//Assign rect's X and Y properties 
var rectX:int; 
var rectY:int; 

switch (registration) 
     { 
     case "TL": rectX = 0; 
        rectY = 0; 
        break; 

     case "TC": rectX = -rectWidth/2; 
        rectY = 0; 
        break; 

     case "TR": rectX = -rectWidth; 
        rectY = 0; 
        break; 

     case "CL": rectX = 0; 
        rectY = -rectHeight/2; 
        break; 

     case "C": rectX = -rectWidth/2; 
        rectY = -rectHeight/2; 
        break; 

     case "CR": rectX = -rectWidth; 
        rectY = -rectHeight/2; 
        break; 

     case "BL": rectX = 0; 
        rectY = -rectHeight; 
        break; 

     case "BC": rectX = -rectWidth/2; 
        rectY = -rectHeight; 
        break; 

     case "BR": rectX = -rectWidth; 
        rectY = -rectHeight; 
     } 


//Draw the rect 
var rect:Sprite = new Sprite(); 
rect.graphics.beginFill(0xFF0000); 
rect.graphics.drawRect(rectX, rectY, rectWidth, rectHeight); 
rect.graphics.endFill(); 
+0

Haha, ouais, l'ancien problème du point d'enregistrement. :) Merci pour votre réponse, excellent. – Francisc

+0

Je ne comprends pas comment ce code fait quoi que ce soit pour changer le point d'enregistrement. La seule chose que je vois, c'est les coordonnées x et y par rapport à la scène. –

1

Ma recommandation au vieux problème de point d'enregistrement, peu de choses ...

  • Si vous pouvez éditer le symbole et vous n'avez que quelques-uns à traiter, honnêtement - le faire manuellement.
  • Si vous avez une poignée assez pour traiter, mais pourrait encore embaucher des singes pour repositionner les symboles, pensez à regarder dans scripts JSFL traitement par lots votre sélection de la bibliothèque symboles.
  • Si vous devez utiliser AS3 pour repositionner dynamiquement ...

    • Et ne vous dérange pas de mettre l'objet dans un autre récipient, mettre dans un nouvel objet Sprite à un endroit où le fond centre répond à l'emplacement (0,0), vous pouvez mettre à l'échelle le conteneur d'images-objets au lieu de votre élément.
    • Et ne vous dérange pas sacrifier la qualité de vecteur pour un instantané BitmapData de votre bien, prendre un instantané de votre bien (car il semble « complètement ouvert/étiré), culture bitmap (en utilisant un combinaison de:

    var rect: Rectangle = bitmapData.getColorBoundsRect (0xFF000000, 0, false); yourCroppedBitmapData.copyPixels (bitmapData, rect, ...);

    ... une fois que vous avez fiable en haut à gauche coincé Ation point, vous pouvez faire le mathématiques pour positionner cette image dans un conteneur Sprite (comme ci-dessus) à l'échelle vers le haut.

Ou ... singes embauche serait amusant aussi: P

Mais oui, ce sont quelques-unes des autres façons que vous pouvez déplacer les symboles.

+0

Merci, bigp. J'espérais qu'il existe une méthode AS3 pour faire cela comme vous le feriez lorsque vous déplacez le point de rotation avec l'outil de transformation (Q). – Francisc

+0

Ouais, pas que je sache. Il semble que ce soit un outil de conception IDE Flash uniquement. Bizarrement, ils prennent en charge la personnalisation de la grille à 9 tranches lors de l'exécution avec AS3. – bigp

+0

Juste pensé à quelque chose, peut-on utiliser la propriété ".scrollRect" de l'objet? (Je ne sais pas si cela conduirait au pire des problèmes, comme l'écrêtage) – bigp