2010-05-27 4 views
0

J'essaie de tracer les coordonnées x et y depuis l'intérieur d'un sprite. J'ai ajouté un rectangle à la scène:ActionScript Local X et Y Coordonnées de l'objet d'affichage?

var rect:Rectangle = new Rectangle(10, 10, 200, 200); 
addChild(rect); 
rect.x = rect.y = 100; 

ajouter un événement MOUSE_MOVE au rect, je peux tracer mouseX et mouseY pour recevoir les coordonnées de la scène tout en se déplaçant sur le rect, mais comment puis-je obtenir la coordonnées locales x et y? donc si je souris en haut à gauche de l'image-objet rect, mouseX et mouseY renvoient 10 comme coordonnées globales, mais comment puis-je le faire retourner 0 et les coordonnées locales de l'image-objet?

i supposé localX et localY était ce que je cherchais, mais cela ne fonctionne pas:

function mouseOverTraceCoords(evt:MouseEvent):void 
{ 
trace(mouseX, mouseY, evt.localX, evt.localY); 
} 

Répondre

2

Cela dépend comment vous avez conçu votre classe Rectangle, si vous avez fait quelque chose comme ceci:

class Rect1 extends Sprite { 
    public function Rect1(x:Number, y:Number, width:Number, height:Number) { 
     var g:Graphics = graphics; 
     g.beginFill(0xff0000, 0.5); 
     g.drawRect(x, y, width, height); 
     g.endFill(); 
    } 
} 

Coordinate locale sera à 0,0 mais vous commencez à dessiner à x,y alors quand vous obtenez la localx, localY vous obtiendrez x,y et non 0,0.

Mais si votre classe est conçue comme quelque chose comme ça:

class Rect2 extends Sprite { 
    public function Rect2(x:Number, y:Number, width:Number, height:Number) { 
     var g:Graphics = graphics; 
     g.beginFill(0xff0000, 0.5); 
     g.drawRect(0, 0, width, height); 
     g.endFill(); 

     this.x = x; 
     this.y = y; 
    } 
} 

alors votre début de dessin à 0,0 et votre objet est déplacé à x,y de sorte que le localX et localY du MouseEvent sera ok.

Edit: Pour obtenir les coordonnées local, vous pouvez essayer d'utiliser getBounds:

function mouseOverTraceCoords(evt:MouseEvent):void { 
var dob:DisplayObject = DisplayObject(evt.target); 
var bnds:flash.geom.Rectangle = getBounds(dob.parent); 
var localX:Number=e.localX - bnds.x + dob.x; 
var localY:Number=e.localY - bnds.y + dob.y; 

trace(mouseX, mouseY, evt.localX, evt.localY, localX, localY); 
} 
+0

il est conçu comme dans votre premier exemple. alors comment puis-je recevoir des coordonnées locales de cela? le sprite rect est draggable, c'est pourquoi je ne peux pas attribuer sa position comme dans votre second exemple. – TheDarkIn1978

+0

@ TheDarkIn1978 Ok, j'ai édité ma réponse, voir si cela fonctionne dans votre application. – Patrick

+0

merci. il s'est avéré être beaucoup plus facile que je l'anticipais. J'ai simplement dû soustraire evt.localX de getRect (this) .x pour recevoir les coordonnées locales. il m'a fallu beaucoup trop de temps pour résoudre cela. – TheDarkIn1978

1

Il n'y a pas besoin de faire des transformations du tout *, votre Rectangle aura deux propriétés appelées mouseX et mouseY qui contiennent les coordonnées locales de la souris.

Si vous dessinez votre décalage graphique dans le rectangle, le système de coordonnées ne le prendra pas en compte, il est préférable de décaler le rectangle entier à la place.

* en supposant que votre classe Rectangle est une sous-classe de DisplayObject, ce que je supposerais depuis que vous l'avez sur scène.

+0

quand je l'appelle rect.mouseX et rect.mouseY, je reçois les mêmes coordonnées que mouseX et mouseY – TheDarkIn1978

+0

de l'étape i signifie, si j'ajoute le rect dans le milieu de la scène, donc il n'est pas situé à X = 0, Y = 0, ce qui retournerait les mêmes coordonnées, ils sont toujours les mêmes. – TheDarkIn1978

+0

J'ai mis à jour ma réponse un peu. – grapefrukt

Questions connexes