-2

ユーザーが画面に触れると、スプライトが作成され、ユーザーが指を離すまでドラッグできます。この時点で、スプライトが画面の下部に落ちるように、物理ボディがスプライトにアタッチされます。ただし、スプライトが別のスプライト/ボディと衝突すると、移動できなくなる必要があります。作成されたスプライトと他のボディ/スプライト (作成された壁やその他のもの) との衝突を確認するにはどうすればよいですか?

4

3 に答える 3

1

AndEngineにはかなり単純な衝突検出が実装されています。方法を参照してくださいcollidesWith(IShape pOtherShape)誰かがそれを改善して透明な領域で動作するようにし、ピクセルの完全な衝突検出を検索します。

物理エンジンを利用することもできます。センサーを参照してください。

于 2012-06-28T12:09:44.407 に答える
1

衝突検出に関する情報を探しています。

状況に応じて実装するのは比較的簡単です。最も簡単な方法は、すべてのオブジェクトを配列/リストに保持し、移動するたびに、現在の位置 + 面積と他のすべてのオブジェクトを計算する必要があることです。これは非常に非効率的ですが、オブジェクトの数が少ない場合はおそらく問題ありません。

これは、私が最初に行った衝突検出のチュートリアルです。C用ですが、コンセプトはあなたが探しているものです。

于 2012-06-21T14:40:39.947 に答える
0

面積を計算することはうまくいきましたが、非常に多くの衝突を扱っていたため、より良い方法が必要でした。かなりの時間がかかりましたが、最終的に ContactListener の使用方法を理解しました (これは本当に私が求めていたものでした.初心者???) とにかく、この質問を見る可能性のある他の人への参照として、ContactListener で次のようなコードを使用できます。

public void beginContact(Contact contact) {
            if(fillerNum>-1 && contact.getFixtureA().getBody().getUserData()!=null && contact.getFixtureB().getBody().getUserData()!=null){
                String x1 = (String) contact.getFixtureA().getBody().getUserData();
                String x2 = (String) contact.getFixtureB().getBody().getUserData();
                if((x1.equals("fill")&&!x2.equals("dest"))||(x2.equals("fill"))&&!x1.equals("dest")){ //If a filler hits a stationary
                    //Log.e("Contact",x1 + " " + x2); 
                    createStationaryFiller();
                }
                if((x1.equals("dest")&&x2.equals("fill"))||(x1.equals("fill")&&x2.equals("dest"))){ //If a destroyer hits a filler
                    destroyFiller();
                }
            }
        }

成長体を設定してユーザー データ「fill」を設定し、固定体を設定してユーザー データ「stat」を設定します。ユーザーデータ「dest」を持つ他のボディもいくつかありました。このようにして、どの 2 つが衝突し、それに応じて反応するかを確認できます。わからなかったらメッセージください。この種のことに慣れていない人を助けるのに問題はありません。

于 2012-07-01T08:07:42.287 に答える