0

プレイヤーの現在の位置にオブジェクトを配置しようとしていますが、離れるとオブジェクトがプレイヤーにくっつきます。プレーヤーに固執する理由はある程度わかっていますが、他のコードを使用することは考えられません。

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

ありがとうロッキー

var trap1:trap = new trap();

function keydown(event:KeyboardEvent) :void {


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

2 に答える 2

0

表示リストがどのように構成されているかはあまり明確ではありませんが、ヒーローの親の子としてトラップを追加してみてください。すなわち:

hero.parent.addChild(trap1);
于 2012-04-20T08:35:25.227 に答える
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 番目の表示オブジェクトからグローバルに位置を計算し、親の座標系内の最初の表示オブジェクトのターゲット ローカル位置にマップします。

お役に立てば幸いです。

于 2012-04-20T12:04:10.847 に答える