Может ли кто-нибудь помочь мне понять следующее?Actionscript странные coords после removeChild называется
Я создаю несколько квадратов спрайтов, а затем удаляю первый и показываю уголки. Результат:
(x=0, y=0, w=208, h=40) 0 208
(x=42, y=0, w=166, h=40) 0 166
Координата х по-прежнему 0, хотя ширина изменилась, GetBounds показывает правильные значения. Я бы ожидал, что x тоже изменится. Из-за неправильного значения x, globalToLocal и localToGlobal работают некорректно.
Если щелкнуть где-то на левой стороне второй (еще виден) прямоугольник вы получите:
2 28 (x=2, y=28)
, который никуда не годится. Значения в скобках должны быть в кодовых координатах, а это не так.
Код:
public function test():void {
var s:Sprite;
var i:int;
var arr:Array = new Array();
for (i = 0; i < 5; ++i)
{
s = new Sprite();
s.graphics.beginFill(0x999);
s.graphics.drawRect(0, 0, 40, 40);
s.graphics.endFill();
s.x = i * 42;
arr.push(s);
addChild(s);
}
trace(this.getBounds(stage), x, width);
removeChild(arr[0]); arr[0] = null;
trace(this.getBounds(stage), x, width);
addEventListener(MouseEvent.CLICK, click);
}
private function click(e:MouseEvent):void {
trace(e.localX, e.localY, localToGlobal(new Point(e.localX, e.localY)));
}
Правильно - я не называл localToGlobal правильным способом. Спасибо. Итак, кажется, что возвращенные локальные коорды всегда относятся к фактически используемой части спрайта. И чтобы получить координаты относительно (x, y), вы должны принять во внимание. Это имеет смысл, но, как обычно, с Flash, он полностью недокументирован. :-) – stach
Простите, у вас есть это в обратном направлении - возвращенные коорды относятся к происхождению спрайта, а спрайт (x, y) - это место происхождения этого спрайта в системе координат его родителя. Согласно документации. ;) Я думаю, что запутанная точка заключается в том, что щелчок происходит на прямоугольнике, поэтому (e.localX, e.localY) является точкой в системе координат, началом координат которой является угол UL щелчка прямоугольника. Но ваш обработчик кликов находится в области родителя прямоугольника. – fenomas
Я был (вероятно ;-), предполагая, что события будут в контексте объекта, чей addEventListener был вызван раньше. Но событие находится в контексте его ребенка. Мне нужно больше узнать о модели событий. Еще раз спасибо. – stach