サイトのトップへ戻る

AndEngineドキュメント 日本語訳

Part 14. 罠を実装する、異なる種類の足場。

パート11の記事では、足場に実装する特別な機能がどういったものか説明しました。前述の通り、3種類の足場を用意します:
  • 足場 1 - 普通の固定足場。特別な機能はない。
  • 足場 2 - 罠の足場。プレイヤーが接触したすると0.2秒後に落下する。
  • 足場 3 - プレイヤーが触れた場合に即座に落下する。

ステージの読み込み、ステージファイルの解析、ゲームシーンの作成を司るコードを既に作成しているので、この実装は本当に簡単です。 覚えているかもしれませんが、各種類の足場のbodyごとに異なるユーザーデータを設定しました("platform1", "platform2" and "platform3")。 これらのユーザーデータを使って、特定の bodies/fixtures同士が接触する度に、何のイベントを実行するのかを識別します。 GameScene内のコンタクトリスナーで確認を行います。



1. 足場 - 即座に落下する。
これを簡単に実装する方法を考えてみましょう。 初めに、既定ではStatic body タイプとして足場のbodyを作成します。 Staticタイプとは、重力のようなbodyを落下させるあらゆる力の影響を受けないことを意味します。 単純に、このタイプをDynamicに変更する必要があるだけです。
  • GameSceneのコンタクトリスナーのコードを開く。
  • beginContact内に、新たに"player" と"platform3"の接触を確認する処理を入れる
    if (x1.getBody().getUserData().equals("platform3") && x2.getBody().getUserData().equals("player"))
    {
        x1.getBody().setType(BodyType.DynamicBody);
    }
    

    これはどういった処理をしているのでしょうか?単に、足場3のbodyタイプをDynamicに変更しているだけです。これで重力の影響を受けるようになり、足場は落下します。



2. 足場 - 遅れて落下する。
次の足場(足場2)で使うために、同様の機能を作成します。 今回は、落下が始まるまでに少し遅れさせます。そのためには、単にタイムハンドラを使用するだけです。
  • ちょうど前回の足場でやったように、以下の記事をbeginContact内に記述します。
    if (x1.getBody().getUserData().equals("platform2") && x2.getBody().getUserData().equals("player"))
    {
        engine.registerUpdateHandler(new TimerHandler(0.2f, new ITimerCallback()
        {                                    
            public void onTimePassed(final TimerHandler pTimerHandler)
            {
                pTimerHandler.reset();
                engine.unregisterUpdateHandler(pTimerHandler);
                x1.getBody().setType(BodyType.DynamicBody);
            }
        }));
    }
    

    これはどういった処理をしているのでしょうか?プレイヤーと足場2が接触した後、新たにタイムハンドラを登録します。そして0.2秒後、足場のbodyをDynamicに設定します。 これで簡単な遅延が実現できました。



特記事項:

この記事では、本当に初歩的なやり方を説明しているのを忘れないでください。 おそらくゲームの種類によっては、足場のspriteやbodyが必要なくなった後に、それを破棄するよう気をつけなければなりません。 (例。足場が落下した後、Y軸上の位置が0以下になった場合) 

前の記事 次の記事