4

飛行機を包むオブジェクトを作成しましPolygonた (飛行機のサイズTextureRegionは 256x74 ですが、ゲームでのこのサイズは 70x20 です)。そう:

TextureRegion[] texRegsAirplane = TextureRegion.split(textureAirplane, 256, 74);
Rectangle bounds = new Rectangle(0, 0, 70, 20);
Polygon polygon = new Polygon(new float[]{0,0,bounds.width,0,bounds.width,bounds.height,0,bounds.height,0,0});

その後、update関数でその位置を更新します。

public void update(float delta){
    Vector2 v = getPosition();      
    v.add(velocity);
    polygon.setPosition(v.x, v.y);
}

次に、ポリゴンをレンダリングして、それがどこにあるかを確認します。

public void render(SpriteBatch spriteBatch, float pixelPerUnitX, float pixelPerUnitY){
spriteBatch.draw(testTexture,polygon.getX()*pixelPerUnitX, polygon.getY()*pixelPerUnitY, 
            polygon.getBoundingRectangle().width*pixelPerUnitX,polygon.getBoundingRectangle().height*pixelPerUnitY);
}

最後に、2 つの飛行機を作成し、それらを互いに飛行させ、反復ごとに以下のように衝突を検出しようとします。

public void detectCollision(){
    for(Airplane airplane1 : Airplanes){
        for(Airplane airplane2 : Airplanes){
            if(Intersector.overlapConvexPolygons(airplane1.getPolygon(), airplane2.getPolygon())){
                //COLLISION DON'T HAPPEN!!!
            }
    }
}

2 つの長方形が移動して交差しているのがわかりますが、overlapConvexPolygons機能しません。なんで?

4

1 に答える 1

8

私はこの問題を解決しました。頂点の指定を間違えました。長方形のポリゴンを取得する必要があったため、次を使用する必要がありました。

polygon = new Polygon(new float[]{0,0,bounds.width,0,bounds.width,bounds.height,0,bounds.height});

ポリゴン オブジェクトを回転させる場合は、原点の設定を忘れないでください。

polygon.setOrigin(bounds.width/2, bounds.height/2);

今では完璧に動作します!

于 2013-01-16T14:43:30.460 に答える