我創建了一個碰撞類來檢測使用像素的碰撞。在我的班級中,我還開發了一些確定校正角度的功能。在此基礎上我創造了一些例子:Actionscript碰撞:解決異常和奇怪的情況
http://megaswf.com/serve/25437/
http://megaswf.com/serve/25436/
(空間來改變重力,左/右給予一定的速度球)
正如你可能會注意到,有這種奇怪的事情發生:
- 當球的速度很低
- 當球的方向是 幾乎相切的障礙。
collision http://img514.imageshack.us/img514/4059/colisao.png
上述圖像顯示瞭如何計算碰撞角度。 我把紅點稱爲關鍵點。我搜索最大數量的關鍵點(通常是4)。如果我找到2個以上的關鍵點,則選擇2個關鍵點(如其中一個藍色對象所示)。那就是我如何找到物體碰撞表面的正常角度。我不知道這是否是一種過時的做事方式。
基於該角度,我旋轉速度矢量做彈跳。
的一段代碼做數學是在這裏:
static public function newSpeedVector(speedX: Number, speedY: Number, normalAngle: Number): Object{
var vector_angle: Number = Math.atan2(speedY, speedX) * (180/Math.PI);
var rotating_angle: Number = (2*(normalAngle - vector_angle) + 180) % 360;
var cos_ang: Number = Math.cos(rotating_angle/DEGREES_OF_1RAD);
var sin_ang: Number = Math.sin(rotating_angle/DEGREES_OF_1RAD);
var final_speedX: Number = speedX * cos_ang - speedY * sin_ang;
var final_speedY: Number = speedX * sin_ang + speedY * cos_ang;
return {x_speed: final_speedX, y_speed: final_speedY};
}
這是新的速度矢量是如何計算的?
我的問題是,有沒有人遇到這樣那樣的問題或對如何避免這種情況有一些想法?
您需要從您的碰撞代碼發佈相關片段 – colithium 2010-07-15 23:12:54