В flex, как получить координаты при использовании VBox для компоновки компонентов? - PullRequest
0 голосов
/ 10 августа 2010

В flex я использую VBox и HBox для укладки компонентов.Когда я пытаюсь получить координаты x, y компонента, я всегда получаю 0. Если я укажу cooridnate, например, mx: VBox x = "120", то получу значение.

Как я могу получить координатубез явного указания.

Ответы [ 2 ]

2 голосов
/ 31 октября 2010

Вы можете перевести координаты относительно сцены. Проверьте код ниже:

var box:VBox = new VBox;
var child:DisplayObject = new DisplayObject;

box.addChild(child);

child.addEventListener(FlexEvent.UPDATE_COMPLETE, updateCompleteHandler);

...

private function updateCompleteHandler(fe:FlexEvent):void{
  // find global coordinates
  var globalCoords:Point = child.localToGlobal(new Point(0,0));

  // coordsInBox is what you are looking for
  var coordsInBox:Point = box.globalToLocal(globalCoords); 
}

Смысл в том, чтобы использовать localToGlobal для дочерних компонентов, а затем globalToLocal, чтобы преобразовать глобальные координаты, чтобы они были выражены относительно контейнера контейнера.

Обратите внимание, что координаты не будут обрабатываться, пока дочерний объект не вызовет UPDATE_COMPLETE.

0 голосов
/ 10 августа 2010

Значения X и Y компонента всегда относительно родительского компонента.directionsHelp.x и directionsHelp.y оба вернут позицию относительно VBox, содержащего их, которая, если вы явно не установите значения или не вставите другие компоненты вокруг него, будет по умолчанию 0.

О чем следует помнитьlocalToGlobal() это то, что вы должны позвонить от ребенка.Если у вас есть Application и вы просто вызываете localToGlobal( new Point(child.x, child.y) ), он попытается вернуть заданную точку в приложении относительно стадии (потому что вы не указали, что такое «локальный»), что, следовательно, не приведет к преобразованию.и, следовательно, он останется равным (0, 0).

Если, однако, вы позвоните child.localToGlobal( new Point(child.x, child.y) ), он вернет значение позиции ребенка относительно сцены, преобразовав данную точку, насколько быребенок смещен на сцену.

Вот быстрое приложение для демонстрации:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"    backgroundColor="#FFFFFF">
    <mx:Script>
        <![CDATA[
            private function updateCoords():void
            {
                var point:Point = new Point(directionsHelp.x, directionsHelp.y);
                point = directionsHelp.localToGlobal(point);
                directionsHelp.text = "My stage coordinates are ("+point.x+", "+point.y+")";
            }
        ]]>
    </mx:Script>
    <mx:VBox>
        <mx:Box height="100" width="100" borderStyle="solid" borderColor="#000000"
            horizontalAlign="center" verticalAlign="middle">
            <mx:Label text="100 x 100" />
        </mx:Box>
        <mx:VBox>
            <mx:Text id="directionsHelp" color="#4FA4CD" fontSize="8" fontWeight="bold"
                text="Click the button to display my position on the stage." />
            <mx:Button label="Get Position" click="updateCoords()" />
        </mx:VBox>
    </mx:VBox>
</mx:Application>
...