このタスクを実行するにはいくつかの方法があります。基本的にあなたが知っておく必要がある細部があります。 Flashでは、表示リストは画面上の要素を管理します。 DisplayObjectクラスとDisplayObjectContainerクラスは、表示リストにアクセスして操作するためのAPIを提供します。
単純なアプローチが
function placeAbove(d1:DisplayObject, d2:DisplayObject):void
{
if (!d1 || !d2) return;
d1.x = d2.x;
d1.y = d2.y;
}
だろう。しかし、両方のDisplayObjectが異なる親を持っている場合、のDisplayObjectはそう、この小さなメソッドは動作しません、テ同じ座標系の一部ではありません。
パッケージ{
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.geom.Point;
public class Points extends Sprite
{
public function Points()
{
const child1:Sprite = createSquare(50, 50, 0xFF0000, .5)
, child2:Sprite = createSquare(100, 100, 0x0000FF, .5)
, container1:Sprite = new Sprite()
, container2:Sprite = new Sprite();
DisplayObjectContainer(placeRandomly(addChild(container1))).addChild(child1);
DisplayObjectContainer(placeRandomly(addChild(container2))).addChild(child2);
placeAbove(child1, child2);
}
private function createSquare(width:Number, height:Number, color:uint = 0, alpha:Number = 1):Sprite
{
const sprite:Sprite = new Sprite();
sprite.graphics.beginFill(color, alpha);
sprite.graphics.drawRect(0, 0, width, height);
sprite.graphics.endFill();
return sprite;
}
private function placeAbove(child1:Sprite, child2:Sprite):void
{
const point:Point = child2.localToGlobal(new Point(0, 0))
, point2:Point = child1.globalToLocal(point);
child1.x = point2.x;
child1.y = point2.y;
}
private function placeRandomly(displayObject:DisplayObject):DisplayObject
{
displayObject.x = Math.random() * 100;
displayObject.y = Math.random() * 100;
return displayObject;
}
}
}
アプリケーションの2乗を生成し、異なる親にそれを追加します。私は小さな一例を符号化されました。コンテナ(親)は画面上にランダムに配置され、2つの子表示オブジェクトも配置されます。 placeAboveメソッドはすべての魔法を実行します。これは、第2の表示オブジェクトからグローバルに位置を計算し、第1の表示オブジェクトへのマップは、親の座標系内のローカル位置を対象とする。
私はそれが役に立ちます。
多分あなたがキーボードを押すたびに、オブジェクトの座標が主人公の座標に再割り当てされるからです。 –