2013-01-16 59 views
2

我已經創建了Polygon對象來包裹我的飛機(飛機的尺寸TextureRegion是256x74,但這個遊戲的大小是70x20)。所以:LibGDX - 正確使用Polygon類

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函數不起作用!爲什麼?

回答

5

我已經解決了這個問題。我錯誤地指定了頂點。我需要得到四邊形多邊形,所以我不得不使用下列內容:

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); 

現在的作品完美!

+0

你對碰撞結果做了什麼?你如何重新調整多邊形? –