рисовать API на этапе Flex 4? - PullRequest
       2

рисовать API на этапе Flex 4?

0 голосов
/ 12 октября 2010

В настоящее время я пытаюсь отладить проблему во 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)
  • Зеленый круг нарисован в неожиданном месте.

Кто-нибудь знает, что я могу попробовать здесь?Это был мой подход к устранению этой ошибки, не стесняйтесь указывать, что я делаю неправильно.

РЕДАКТИРОВАТЬ: Вот изображение, которое объясняет отношения между компонентами и где рисуются точки: alt text

1 Ответ

0 голосов
/ 12 октября 2010

Во-первых, Вы уверены, что синий круг нарисован там, где ожидается?

Я предполагаю, что ваша первая часть кода является кодом ComponentA.

this.x и this.y являются координатами элементов управления относительно его родителя.

Ссылка на ваш синий круг иллюстрации должна быть где-то еще, но не в верхнем левом углу компонента, как вы рисуете в локальном графическом объекте компонента. Я создал пользовательский компонент и проверил это. Вы можете попробовать это самостоятельно. Положение круга внутри компонента зависит от расположения компонентов в его контейнере.

package components
{
    import mx.controls.Button;
    public class ComponentA extends Button
    {
        public function ComponentA()
        {
            super();
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            this.graphics.beginFill(0x0000FF);
            this.graphics.drawCircle(this.x,this.y, 10);
        }
    }
}

Во-вторых, var pGC: Point = Application (FlexGlobals.topLevelApplication) .globalToLocal (p); не должно иметь никакого эффекта при переводе координат (я не проверял, но так и должно быть) Иначе, каковы глобальные координаты, если не координаты уровня приложения ...

А в коде слушателя, что такое childContainer, который вы используете для перевода координат?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...