2013-02-27 14 views
0

У меня есть более крупный проект, но я могу сузить проблему до этого примера:Координаты ребенка спрайта в AS3

public function Main() 
    { 
     var myContainer:Sprite = new Sprite; 
     myContainer.graphics.beginFill(0xFFFFFF); 
     myContainer.graphics.lineStyle(1); 
     myContainer.graphics.drawRect(10, 10, 300, 300); 
     myContainer.graphics.endFill(); 
     addChild(myContainer); 
     trace('Container coords: ' + myContainer.x + ' ' + myContainer.y); 
     trace('Instance coords: ' + getChildAt(numChildren - 1).x + ' ' + getChildAt(numChildren - 1).y); 
     var spr:Sprite = new Sprite; 
     spr.graphics.beginFill(0xFF0000); 
     spr.graphics.lineStyle(1); 
     spr.graphics.drawCircle(30, 30, 10); 
     spr.graphics.endFill(); 
     myContainer.addChild(spr); 
     trace('Child coords: ' + spr.x + ' ' + spr.y); 
     trace('Child instance coords: ' + myContainer.getChildAt(myContainer.numChildren - 1).x + ' ' + myContainer.getChildAt(myContainer.numChildren - 1).y); 
    } 

Выход есть это:

Container coords: 0 0 
Instance coords: 0 0 
Child coords: 0 0 
Child instance coords: 0 0 

Может кто-нибудь объяснить, как чтобы получить фактические координаты дочернего спрайта внутри спрайта (локального или глобального, я знаю, что вы можете конвертировать между ними)?

+0

Nitpick: ваш последний след имеет неправильный 'numChildren'. Если ваш 'this' имеет больше детей, чем просто' myContainer', вызов 'getChildAt()' генерирует исключение. Вместо этого вы должны обратиться к 'myContainer.numChildren'. – Vesper

+0

Спасибо, исправлено. – Ashden

ответ

0

Ваш myContainer не установлен x, y. только была установлена ​​графика рисования координат (10,10). spr versa.

см. Следующий код. этот код отличается от другого, но визуальный вывод такой же. Установлено в 10 координат родителя. (0, 0). поэтому myContainer x, y - 10, и я думаю, вы слегка ошибаетесь. getChildAt(numChildren-1) является myContainer. поэтому эти координаты также совпадают. у моего Контейнера нет детей. graphics не является дочерней концепцией. Кроме того, дочерние координаты относительно родительского.

var myContainer:Sprite = new Sprite; 
myContainer.x = 10; 
myContainer.y = 10; 
myContainer.graphics.beginFill(0xFFFFFF); 
myContainer.graphics.lineStyle(1); 
myContainer.graphics.drawRect(0, 0, 300, 300); 
myContainer.graphics.endFill(); 
addChild(myContainer); 

//myContainer.x = 10, myContainer.y=10 
//getChildAt(numChildren - 1).x = 10, getChildAt(numChildren - 1).y = 10 

код следующим образом:

enter image description here

мой код выглядит следующим образом:

enter image description here

+0

Спасибо, что нашли время, чтобы объяснить. Хотя это кажется логичным, он некоторое время избегал моей хватки. Несмотря на это, везде, где я искал, я не нашел объяснений. – Ashden

0

попробовать это!

var point:Point = new Point(spr.x, spr.y); 
point = localToGlobal(point); 
trace('Child coords: ' + point); 
Смежные вопросы