2017-08-29 142 views
0

我正在使用多邊形進行碰撞檢測。我有一塊石頭,在某個方向上移動。碰撞檢測的多邊形位置不會更新?或碰撞?

當我運行該應用程序時,該多邊形呈現​​爲一個完美的矩形,在該矩形開始時是岩石。

然而,它並不移動岩石。

public Polygon box; 
private int width; 
public int height; 
public float [] vertices; 

public Rock (float x, float y, int width, int height) { 
    this.width = width; 
    this.height = height; 
    position = new Vector2(x, y); 
    velocity = new Vector2(20, 0); 

    vertices = new float[] {position.x, position.y, position.x+width, position.y, position.x+width, position.y+height, 
      position.x, position.y+height}; 
    box = new Polygon();   
    box.setOrigin(width/2, height/2); 

} 

public void RockMove (float delta) { 
    position.add(velocity.cpy().scl(delta)); 
    box.setVertices(vertices); 
    box.setPosition(position.x, position.y); 

} 

精靈一批搖滾

public void render (float delta) { 
    batch.begin(); 
    batch.enableBlending(); 
    batch.draw(rock, rock.GetX(), rock.GetY(), rock.GetWidth(), rock.GetHeight()); 
    batch.disableBlending(); 
    batch.end(); 

} 

這是從呈現類

shapeRenderer.begin(ShapeRenderer.ShapeType.Line); 
    shapeRenderer.setColor(Color.RED); 
shapeRenderer.polygon(Rock.vertices); 

shapeRenderer.end(); 

又有些代碼,多邊形完全顯示出來,但不會移動。我沒有任何錯誤。

編輯:我在岩石移動方法中再次定義了頂點,現在他們隨着岩石移動。

public void RockMove (float delta) { 
    position.add(velocity.cpy().scl(delta)); 
    box.setVertices(vertices); 
    box.setPosition(position.x, position.y); 

vertices = new float[] {position.x, position.y, position.x+width, 
position.y, position.x+width, position.y+height, 
      position.x, position.y+height}; 

} 

但是由於某些原因,碰撞檢測不起作用。

回答

1

不要在更新中再次定義頂點,而應該使用「多邊形」的transformedVertices。

Polygon polygon=new Polygon(); 
float transformed[] = polygon.getTransformedVertices(); 

TransformedVertices是已應用縮放,旋轉和位置平移之後的多邊形的頂點。

+1

謝謝,我其實已經親身體會到了這一點。 –

+0

太棒了:) – Aryan