2

目前我在LibGDX中開發遊戲並使用矩形進行碰撞。LibGDX設置hitbox較小

我需要幫助檢測collisions矩形。 A已經這樣做了,但是我會把rectangle放在texture的中心。所以這個矩形比texture小,並且在這個中間。

我已經知道了,我可以將size設置爲:rectangle.setSize並將其與rectangle.setPosition相加,但是我怎麼能把它放在我的紋理中間?

回答

0

我不會設置Hitrectangle的位置的Texture,但Texture位於Hiterectangle的位置。爲什麼? Texture只是您遊戲的光學表現。但它沒有需要執行的邏輯。而Hitrectangle反而只有邏輯,沒有光學表現。 Collision detection是(一個非常重要的)邏輯的一部分。所以我會設置Hitrectangle的位置,然後根據位置設置Texture。 可以說Hitrectangle是0.5 unit s(使用你想要的單位,也許米?)寬和高,Texture是1 unit寬和高。由Hitrectangle的左下角給出的位置是P(5,6),所以你必須畫出TextureP(5 - 0.25, 6 - 0.25)。 出於這一點,你有以下的公式:

Texture.x = Hitrect.x - ((Texture.width - Hitrect.width)/2); 
Texture.y = Hitrect.y - ((Texture.height - Hitrect.height)/2); 

希望它能幫助。

+0

hmm.I沒有我的紋理上的x和y座標,所以我在我的矩形的位置上繪製紋理...這是否是錯誤的方式來做到這一點?對不起我的英語不好,我住在德國:) –

+0

我也說德語,但我住在意大利xD 你可以在draw()方法中設置Texture的位置。它寫在Lestats的答案。我的代碼應該只是幫助你理解它,它不是複製過去的代碼。 查看SpriteBatch.draw()方法並查找所需的一個。第二和第三個參數是x和y位置的大部分倍數。 – Springrbua

+0

好的:)在我這樣做的那一刻:Rectangle r = new Rectangle(100,100,50,50); batch.draw(texture,r.x,r.y);這是正確的方式還是? –

0

比方說這些都是你的價值觀:

float dwidth = 1, dheight = 1; //your object visible size 
Rectangle bounds = new Rectangle(0, 0, 0.75F, 0.75F); //your rectangle, position initialized in 0, size smaller than the visible size 

然後正確地拉攏的對象,你會做這樣的:

batch.draw(region, bounds.x-(dwidth-bounds.width)/2F, bounds.y-(dheight-bounds.height)/2F, dwidth, dheight);