ステージの読み込み、ステージファイルの解析、ゲームシーンの作成を司るコードを既に作成しているので、この実装は本当に簡単です。 覚えているかもしれませんが、各種類の足場のbodyごとに異なるユーザーデータを設定しました("platform1", "platform2" and "platform3")。 これらのユーザーデータを使って、特定の bodies/fixtures同士が接触する度に、何のイベントを実行するのかを識別します。 GameScene内のコンタクトリスナーで確認を行います。
if (x1.getBody().getUserData().equals("platform3") && x2.getBody().getUserData().equals("player")) { x1.getBody().setType(BodyType.DynamicBody); }
これはどういった処理をしているのでしょうか?単に、足場3のbodyタイプをDynamicに変更しているだけです。これで重力の影響を受けるようになり、足場は落下します。
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以下になった場合)
前の記事 | 次の記事 |