我已經知道矩形的矩形碰撞檢測,但是這次我有2個旋轉的位圖。 我的意思是,我有正常的位圖+一個名爲「方向」的浮動變量,並告訴位圖在繪製時必須旋轉到哪個方向。Android - 位圖碰撞檢測(旋轉)
但是如何才能知道如果這些對象的2互相碰撞?這將是足夠多的,也一樣,如果你可以說我2之間的碰撞檢測是如何旋轉矩形作品...或者,也許你可以張貼一些代碼...
謝謝你,如果你能幫助(謝謝你,如果你花時間閱讀這還是想着答案)
我已經知道矩形的矩形碰撞檢測,但是這次我有2個旋轉的位圖。 我的意思是,我有正常的位圖+一個名爲「方向」的浮動變量,並告訴位圖在繪製時必須旋轉到哪個方向。Android - 位圖碰撞檢測(旋轉)
但是如何才能知道如果這些對象的2互相碰撞?這將是足夠多的,也一樣,如果你可以說我2之間的碰撞檢測是如何旋轉矩形作品...或者,也許你可以張貼一些代碼...
謝謝你,如果你能幫助(謝謝你,如果你花時間閱讀這還是想着答案)
一般情況下,你會needto使用Separating Axis Theorem確定兩個旋轉矩形是否發生碰撞。但是有一種簡單的方法,您可以在使用SAT之前判斷矩形是否發生碰撞,以便您不必進行不必要的處理。您可以執行邊界圓檢查,通過證明矩形不相交,證明它們的邊界圓不相交。
一個矩形的外接圓共享其中心,並有一個直徑等於或者對角線的矩形的的長度。基本上,如果圓不相交,那麼矩形也不能相交。
我不知道你是如何執行你的旋轉,但如果你使用的是形狀/地區類型的對象,你可以使用AffineTransform
進行旋轉,然後用intersects()
每個旋轉對象的區域,以檢查他們是否碰撞,這可以節省你自己實施它。請看下面的例子:
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
public class Main {
public static void main(String args[]) {
//Create rectangle
Rectangle rect = new Rectangle(10, 10, 10, 10);
//Create transformation object
AffineTransform af = new AffineTransform();
//Rotate the rectangle by 45 degrees
af.rotate(Math.PI/4, rect.x, rect.y);
Rectangle rect2 = new Rectangle(20, 20, 20, 20);
AffineTransform bf = new AffineTransform();
bf.rotate(Math.PI/4, rect2.x, rect2.y);
//Create Area objects based off of the Rectangle objects
Area areaA = new Area(rect);
//Set the Area object to be the same as the Rectangle object
areaA = areaA.createTransformedArea(af);
Area areaB = new Area(rect2);
areaB = areaB.createTransformedArea(bf);
//Check if the objects collide by using their Area equivalent
if (areaA.intersects(areaB.getBounds())) {
System.out.println("Collision!");
}
}
}
可以很明顯的,修改這個適合你的實現 - 我希望這點你在正確的方向。
非常感謝您對這個答案,但unfortunatels我無法導入這些套件... :(它總是說:「進口的java.awt.geom不能得到解決」,並,每進口。也許是因爲我編碼爲Android? – user1059863
http://google.com/codesearch/p?hl=en#uX1GffpyOZk/awt/java/awt/geom/AffineTransform.java顯示,AWT包是可用到Android(據我所知),你會但是必須將Rectangle更改爲Rectangle2D – Deco
java.awt中唯一對我可用的包是java.awt.font ...這可能是因爲我正在爲2.1開發,並且它不受支持嗎? – user1059863