2013-01-16 29 views
0

LibGDX有Intersector類,其中包含intersectRayBoundsFast函數。我想知道如何使用它?首先,如何界定我的飛機像下面?:LibGDX - BoundingBox和Ray交集

enter image description here

第二個問題是如何正確地移動此BoundingBox?沒有像,rotate等這樣的功能。 第三個是如何創建正確的Ray對象來找到殼和飛機之間的交集?

enter image description here

請幫助我。

回答

0

通常,邊界框是粗略的測試。爲了測試的速度,邊界框通常是「軸對齊」(縮寫爲「AABB」),具體而言,這意味着它們不隨對象旋轉,而是隨着所包含的對象旋轉而調整大小。 (你在問題中所包括的圖像是用於飛機精靈的AABB的合理例子。)

邊框相交測試快速運行,這樣他們就可以消除所有,是完全不相干的元素,但留給你一組可能被擊中的物品。之後,你可以做(​​如有必要,往往沒有必要)更精確的相交測試。例如,基於底層幾何圖元或使用基於像素的光線交點。請注意像素衝突是complicated in libGDX

對於您的具體情況,我認爲您可以模擬飛機的線路。想象一下,從鼻子到尾巴畫一條線,如果殼擊中那條線,它就會撞上飛機。你並不需要精確的基於像素的碰撞檢測(這種方法看起來不錯)。

假設你的殼垂直移動,你只需要計算兩條線段的交集:Efficient maths algorithm to calculate intersections

所有這一切說,你可能甚至不需要是精確和可以逃脫粗基於AABB的測試。例如,在底部圖像中,雖然外殼實際上並未與飛機相交,但它很明顯。假設其移動速度足夠快,玩家將無法辨別。如果你想讓遊戲變得更加寬容或者更加寬容,你可以通過將邊界框縮小一些(也許會留下一些盒子的尾部)來改變它。

另外,不要使用Ray來檢測交集(這是爲了測試接觸點是否與框相交)。您應該使用AABB作爲外殼,並執行rectangle overlap test

+0

我想過從鼻子到尾巴的線條。但它不適合我,如果殼穿過底線左側的鼻子。當然,我可以創建垂直於底線的第二條線。但我真的很想知道如何在例子中使用'Ray'和'BoundingBox'。不過謝謝! – Nolesh