В настоящее время я пытаюсь отладить проблему во Flex 4, где компонент запускает пользовательское событие с его локальными координатами, переведенными в глобальные координаты (т.е. localToGlobal), и другим компонентом (в отдельной «ветви» дисплеяиерархия списка) получает такое событие и использует его как часть анимации через globalToLocal.Это должна быть простая система преобразования координат, но она не работает.
Я пытаюсь отладить это, используя API рисования AS3 для рисования окружностей, где должны быть точки.
Вот компонент диспетчеризации (компонент A на изображении ниже):
// Check where is the local x,y
this.graphics.beginFill(0x0000FF);
this.graphics.drawCircle(this.x,this.y, 10);
// Draw another circle in the "global" coordinates.
// pGC = Point in Global Coordinates.
var p: Point = new Point ( this.x, this.y);
var pGC:Point = Application(FlexGlobals.topLevelApplication).globalToLocal(p);
Application(FlexGlobals.topLevelApplication).graphics.beginFill( 0xFF0000)
Application(FlexGlobals.topLevelApplication).graphics.drawCircle(pGC.x,pGC.y,50);
// Dispatch the event
dispatchEvent( new ComponentLocationEvent( this.localToGlobal(this.x,this.y) );
Вот компонент «прослушивания» (компонент B на рисунке ниже):
private var value_x:int;
private var value_y:int;
private function onComponentLocationData( pointInGlobalCoordinates:Point):void
{
var pointLocalCoord:Point = this.childContainer.globalToContent(
pointInGlobalCoordinates);
this.value_x = pointLocalCoord.x;
this.value_y = pointLocalCoord.y;
// More debugging circles
this.graphics.beginFill(0x00FF00, 0.5);
this.graphics.drawCircle(pointLocalCoord.x,pointLocalCoord.y);
}
Одиножидать, что три круга (красный, зеленый и синий) будут соответствовать друг другу, каждый из которых будет нарисован непосредственно перед отправкой события и один (зеленый) при прослушивании события.На самом деле происходит следующее:
- Синий круг нарисован там, где вы этого ожидаете.
- Красный круг никогда не рисуется (поэтому мой вопрос о рисовании на сцене во Flex 4)
- Зеленый круг нарисован в неожиданном месте.
Кто-нибудь знает, что я могу попробовать здесь?Это был мой подход к устранению этой ошибки, не стесняйтесь указывать, что я делаю неправильно.
РЕДАКТИРОВАТЬ: Вот изображение, которое объясняет отношения между компонентами и где рисуются точки: