使用簡單的Java 2D遊戲。坦克由用戶控制。它可以以任何角度旋轉,並沿該角度的方向移動。精靈旋轉時邊界框不旋轉
我正在爲坦克製作一個邊框,所以後來我可以添加碰撞檢測。目前,我在無論哪裏都有精靈,但精靈旋轉時它不會旋轉。我試圖添加代碼以使該框與精靈一起旋轉,但添加此代碼只會使邊框變得瘋狂。它不再像盒子一樣出現,更像是一條只閃爍和四處移動的線條。
(顯然,邊界框應該是不可見的,但現在我正在屏幕上繪製它以檢查問題)。
xcoo[]
和ycoo[]
都是double
類型,每個都有四個值。這些值是邊界框的四個頂點的座標(矩形形狀Path2D
)。
(請注意,只創建了一個實際邊界框時,需要在屏幕上繪製,或在我還沒有寫的碰撞檢測。大多數時候,它只是座標。)
坦克的move()
方法被稱爲遊戲循環的每個週期。
move()
方法更新精靈的位置和邊界框的位置。這工作正常。但正如我所說,試圖在該方法旋轉邊框(又名操縱它利用旋轉矩陣頂點),使得它走
這裏是Tank
的move()
方法:
public void move(){
// Updates the location of the sprite. (works)
x += dx;
y += dy;
bbCenterX += dx;
bbCenterY += dy;
// Updates the location of the bounding box. (works)
for(int i=0;i<4;i++){
xcoo[i] += dx;
ycoo[i] += dy;
}
// Should rotate the bounding box (aka, manipulate it's coordinates
// so when it is created with these coordinates, it's rotated).
// (Doesn't work).
for(int z=0;z<4;z++){
xcoo[z] = xcoo[z] - bbCenterX;
ycoo[z] = ycoo[z] - bbCenterY;
xcoo[z] = ((xcoo[z] * Math.cos(angle)) - (ycoo[z] * Math.sin(angle)));
ycoo[z] = ((xcoo[z] * Math.sin(angle)) + (ycoo[z] * Math.cos(angle)));
xcoo[z] = xcoo[z] + bbCenterX;
ycoo[z] = ycoo[z] + bbCenterY;
}
}
什麼問題我的輪換?我懷疑這是問題出現的代碼部分,但如果你有不同的想法,請告訴我發佈更多代碼。
非常感謝
提醒我一個故事,我的商業藝術家叔叔告訴我約1970年。他正在製作一些最早的電腦圖形的電視廣告(卡車)。極客們首先讓卡車車輪滾到屏幕上,然後卡車車身下降到車輪上。然後輪子滾開,留下(哎呀!)卡車車身站在那裏。他們在第二次考試中正確無誤。 –