0

迷路を通り抜けなければならないゲームを書いています。このゲームにはさまざまなレベルが必要です。しかし、レベルごとに、迷路は異なります。だから私は他の壁を描きました。しかし、50 の異なるレベルがある場合、衝突検出メソッドを 50 回書きたくありません。

解決方法を考えたのですが、うまくいきません。何も入っていない新しいシンボルを作成し、壁と名付けました。wall = wall1 (変換してエクスポートした別のシンボル) にして、stage.addChild(wall) を実行するだけでよいと思います。しかし、私はそれを行う方法を見つけることができません。だから私は助けが必要です!

4

2 に答える 2

0

たとえば、ジェネリッククラスWallを作成し、ライブラリシンボルがそれを基本クラスに使用するようにします。この継承を機能させるために、実行時に ActionScript を使用してそれらを作成する必要はありません。ムービークリップをステージに配置するだけでかまいません。

次に行う必要があるのは、これらの壁をどこかに保管することです。あなたは ActionScript に不慣れで、新しいレベルのコードを書くことを避けたいので、manager タイプ クラスを使用してこのプロセスを自動化できます。このクラスを呼び出すと、次のWallManagerようになります。

public class WallManager
{
    private static var _walls:Vector.<Wall> = new <Wall>[];

    internal static function register(wall:Wall):void
    {
        _walls.push(wall);
    }

    public static function reset():void
    {
        _walls = new <Wall>[];
    }

    public static function get walls():Vector.<Wall>{ return _walls; }
}

Wall次に、クラスを作成します。このクラスのコンストラクター内で、自動的に Wall 自体をWallManagerリストに追加します。

public class Wall extends Sprite
{
    public function Wall()
    {
        WallManager.register(this);
    }

    public function touchingMouse(mouseX:int, mouseY:int):Boolean
    {
        // For this example I am checking for collisions with the
        // mouse pointer. Replace this function with your own collision
        // logic for whatever it is that is supposed to collide with
        // these walls.

        if(parent === null) return false;

        var bounds:Rectangle = getBounds(parent);
        return bounds.contains(mouseX, mouseY);
    }
}

このセットアップは「ベスト プラクティス」ではありませんが、プロジェクトが小さく、単独で作業しているように見え、シンプルで仕事が完了するため、状況に適しています。

各レベルの終わりにWallManager.reset()、前のレベルから壁を取り除くために使用します。すべての壁の衝突をチェックするには、次のようなループを使用します。

for each(var i:Wall in WallManager.walls)
{
    var collision:Boolean = i.touchingMouse(mouseX, mouseY);

    if(collision)
    {
        // There was a collision.
        //
        //
    }
}
于 2013-06-10T22:45:47.583 に答える
0

最初のフレームで 50 フレームのムービークリップを 1 つ作成stop()し、次のようにコードを実行できます。

    private var wallnum:int;

public function Main()
{
   stop();
   wallnum = 1;
   var wallobj = new Wall();
   addChild(wallobj);
   wallobj.gotoAndStop(wallnum);
}

衝突検出には、Pixel Perfect Collision Detection ( https://code.google.com/p/master-air-controller/source/browse/trunk/master-air-controller/src/PixelPerfectCollisionDetection.as?spec=svn6&rをお勧めします) =6 )

于 2013-06-11T22:01:17.150 に答える