2017-09-26 1 views
0

私は非常にlibgdxとゲームの開発者です。私は矩形衝突検出が既に実装されている非常に単純な2Dゲームを与えられた課題を割り当てられました。非常に単純な2Dゲームでlibgdxピクセルコリジョン

ゲームはちょうど壁の中にある他の散在した四角の壁の内側にあるプレーヤーによって制御することができる正方形でできています。私は今、プレーヤーの四角形と散在した四角形/壁の間にピクセル完全な衝突を実装する必要があります。

私はもともとPixmapを使って試してみましたが、現在の座標のピクセルがプレーヤーの四角形に対して透明であるかどうか、またどの矩形が衝突しているかをチェックしようとしましたが、コードを正しく実装するのに問題があります。

特定の座標で両方のオブジェクトのピクセルの色をチェックして、衝突が発生するために両方が透明ではないが問題が発生しているかどうかを確認するだけでよいことを理解します。私は非常に長い時間を研究し、オンラインで見ているので、これを実行する方法についての助言やアドバイスは大いに感謝しています!

public boolean entityCollision(Entity e1, Direction direction, float newX, float newY) { 
    boolean collision = false; 

    for(int i = 0; i < entities.size(); i++) { 
     Entity e2 = entities.get(i); 

     if (e1 != e2) { 

      if (newX < e2.x + e2.width && e2.x < newX + e1.width && 
       newY < e2.y + e2.height && e2.y < newY + e1.height) { 
       collision = true; 

       int colorOne = player.getPixel((int)newX,(int)newY); 
       int colorTwo = enemy.getPixel((int)e2.x,(int)e2.y); 

       if (colorOne != 0 && colorTwo != 0) { 
        collision = true; 
        e1.entityCollision(e2, newX, newY, direction); 
       } 
      } 
     } 
    } 

    return collision; 
} 

答えて

1

libgdxのthe Rectangle implementationをご覧ください。それはあなたがこのような何かを行うことができます:

Rectangle e1Rec = new Rectangle(e1.x, e1.y, e1.width, e1.height); 
Rectangle e2Rec = new Rectangle(e2.x, e2.y, e2.width, e2.height); 

if (e1Rec.contains(e2Rec)) { 
    // Collision! 
} 
+0

ありがとうございました! .contains()メソッドの代わりに.overlaps()メソッドを使用して動作させることができました。 –

0

あなたはスプライトとの衝突をしたい場合は、スプライトの矩形を取得し、その四角形の内部衝突をチェック。

sprite.getboundingrectangle().contains(x, y) ; //returns a boolean 
関連する問題