【发布时间】:2011-03-16 16:50:38
【问题描述】:
我创建了一个碰撞类来使用像素检测碰撞。在我的课堂上,我还开发了一些用于确定碰撞角度的函数。基于此,我创建了一些示例:
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};
}
这就是计算新速度向量的方式...
我的问题是,有没有人遇到过这种问题,或者对如何避免这种情况有一些想法?
【问题讨论】:
-
您需要从碰撞代码中发布相关的 sn-ps
标签: actionscript-3 exception physics collision bounce