2017-06-24 1 views
0

LibGDXを搭載したAndroid用の小さなゲームを作成しようとしていて、衝突検出に苦労しています。 だから、私は2つの形状があります。 最初の1は、長方形(プレイヤー)である:LibGDXでShapeRendererとの衝突を処理する方法

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); 
shapeRenderer.setColor(Color.BLACK); 
shapeRenderer.rect(position.x, position.y, width, height); 
shapeRenderer.end(); 

を秒1はケージの以下、一種である:

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); 
shapeRenderer.setColor(Color.BLACK); 
shapeRenderer.rect(0, 0, 50, Gdx.graphics.getHeight()); 
shapeRenderer.rect(0, 0, Gdx.graphics.getWidth(), 50); 
shapeRenderer.rect(Gdx.graphics.getWidth()-50, 0, 50, Gdx.graphics.getHeight()); 
shapeRenderer.rect(0, Gdx.graphics.getHeight()-50, Gdx.graphics.getWidth(), 50); 
shapeRenderer.end(); 

私の質問は次のとおりです。

これら2つのオブジェクトの衝突を検出するにはどうすればよいですか?私が知っている唯一の方法は、衝突を検出する方法はRectangleクラスからのintersectメソッドですが、私は長方形より複雑な形状を作りたいと思います。

ありがとうございました!

+0

あなたが話している複雑な形状は、ちょうど複数の小さな四角形で構成されています。それらを、あるいは三角形やその他のポリゴンのようなものだけでもいいのですか? – Bernd

+0

いいえ、私はより大きな形を作るために小さな四角形を使いたいと思います。私は、私が望む小さな矩形ごとにRectangleクラスから矩形を作成する必要がありますか? – Theoker

答えて

0

文書ShapeRendererによれば、効率的ではなく、集中的に使用すべきではありません。

点、線、矩形、塗りつぶされた矩形およびボックスをレンダリングします。この クラスは、パフォーマンスに影響を受けやすいアプリケーションのために使用されることは意図されていません。

Spriteを適切なサイズにアップスケールした小さな白いテクスチャで割り当てる方がよい場合があります。色合いとアルファをsetColor(..)メソッドで設定します。

衝突の場合は、衝突の際に役立つSpriteリターン境界軸のRectangleのgetBoundingRectangle()です。

pixmapを使用して手動でテクスチャを作成できます。ポイントとはPolygonを作成することを

public static Texture createBgTexture() { 
    Pixmap pixmap = new Pixmap(1, 1, Format.RGBA8888); 
    pixmap.setColor(Color.WHITE); 
    pixmap.fill(); 
    Texture texture = new Texture(pixmap); // must be manually disposed 
    pixmap.dispose(); 

    return texture; 
} 

が読めるファイル形式でご形状の頂点を返します、より複雑な形状の使用Physics Body Editorについては、使用しています。

Intersectorクラスを持ち、多くの静的衝突検出方法(intersectPolygons(....)など)を含んでいます。


一方、現実的な衝突検出が必要な場合は、ゲームでbox2dを使用できます。 box2d APIの内部には、本体が2つ衝突したときに表示されるContactListenerインターフェイスがあります。

+1

私はシェイプレンダラーを去りました。あなたの助けをありがとう、私はあなたが私に言ったことをしようとしています! – Theoker

関連する問題