2017-09-26 93 views
0

我對libgdx和遊戲開發非常陌生。我被賦予了一個任務,在這個任務中我得到了一個非常簡單的2D遊戲,它已經實現了矩形碰撞檢測。libgdx像素碰撞非常簡單的2D遊戲

遊戲只是由一個可以由玩家控制的廣場組成,該廣場位於牆內,牆內有其他分散的廣場。我現在需要在玩家廣場和分散的廣場/牆壁之間實現像素完美的碰撞。

我最初嘗試使用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

謝謝!我能夠使用.overlaps()方法而不是.contains()來工作。 –

0

如果你想與一個精靈的碰撞,你得到的精靈矩形,並檢查該矩形的內部衝突。

sprite.getboundingrectangle().contains(x, y) ; //returns a boolean