1

ランダムなパスでシーン上に単一のスプライトが連続的に生成されるゲームを開発しています。それらにパス修飾子を適用します。シーン上でランダムに移動している間、1つのスプライトが他のスプライトと重なります。この重なりを止めたい。

すぐに、私は2つの解決策を見つけます。(多分)

最初の1つ:この理由は、それらの間の衝突を検出してから、新しいパスを指定すれば解決できると思いました。

2つ目:衝突が発生したときにパスモディファイアを2/3秒間一時停止し、パスモディファイアを再開した後に再び移動した場合(可能ですか?)

今すぐファーストアプローチを試してみました。 問題:Updateハンドラー内で反復するスプライトを一意に識別できません。レイヤーを使ってアタッチしません。

私はそれらを生成してリサイクルするために汎用プールを使用しています。

コード

public Iterator<EasyEnemy> eIt;

registerUpdateHandler(new IUpdateHandler() {
        @Override
        public void onUpdate(float pSecondsElapsed) {
            try {
                // ===get EasyEnemy List from it===
                eIt = getEasyEnemyIterator();
                while (eIt.hasNext()) {
                    EasyEnemy ee = eIt.next();

                    // need some help here 
                    if (ee.collidesWith(ee)) {

                        // this doesn't work.

                    }
                }
            } catch (Exception e) {
            }
        }

        @Override
        public void reset() {

        }
    });

私は自分の問題に集中するように最善を尽くします。誰かがより良い解決策を持っているなら、助けてください私を助けることができます。

4

1 に答える 1

3

ee 変数は、衝突をチェックするオブジェクトを記述します。ee が衝突する他のオブジェクトはどこですか? 基本的に、ee が ee と衝突することを確認しています。

オブジェクトはそれ自身と衝突することはありません:)

オブジェクト間の衝突をチェックするには、2 つの異なるオブジェクトが必要です。ArrayList にすべてのオブジェクトがある場合は、このようになります。

for(int i = 0;  i< yourList.size()-1;i++)
{
    for(int j = 0;  j< yourList.size()-1;j++)
   {

      if(yourList.get(i)!= yourList.get(j))
        {
          if(yourList.get(i).collideswith(yourList.get(j))
           {
            //do what you want to do on collision :)
           }
         }

   }

 }
于 2013-02-19T09:11:05.870 に答える