2012-04-20 10 views
0

オブジェクトをプレイヤーの現在の位置に配置しようとしていますが、オブジェクトをプレイヤーに貼り付けるときに移動します。私はそれがなぜ私のプレーヤーに固執しているのか知っていますが、他のコードを使うことはできません。オブジェクトを別のオブジェクトの現在の位置に配置します。

ヒーローは私が画面を移動する私のプレイヤーです。

おかげLochy

var trap1:trap = new trap(); 

function keydown(event:KeyboardEvent) :void { 


    if(event.keyCode ==32) 
    addChild(trap1); 
    trap1.x = hero.x; 
    trap1.y = hero.y; 
+0

多分あなたがキーボードを押すたびに、オブジェクトの座標が主人公の座標に再割り当てされるからです。 –

答えて

0

このタスクを実行するにはいくつかの方法があります。基本的にあなたが知っておく必要がある細部があります。 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の表示オブジェクトへのマップは、親の座標系内のローカル位置を対象とする。

私はそれが役に立ちます。

0

それはあなたのディスプレイリストの編成方法は非常に明確ではないですが、主人公の親の子としてトラップを追加してみてください。すなわち:

hero.parent.addChild(trap1); 
+0

申し訳ありませんが、私はこれに新しいです。私はあなたが置いたものを試したが、うまくいかなかった。しかし、ありがとう。 – LochyMacleod

+0

私はちょうどこれを行い、それは働いた。 var trap1:trap = new trap(); var position = hero.x && hero.y; if(event.keyCode == 32) addChild(trap1); \t \t trap1.x = position; \t trap1.y = position; – LochyMacleod

+0

私は私の質問に答えることはできませんので、投稿したら、私はそれを確認します。 – LochyMacleod

関連する問題