【发布时间】:2011-06-22 02:50:08
【问题描述】:
我一直在努力解决碰撞响应方法,我用 actionscript 3 编写了很长时间,我希望有人能解释一下这段代码的含义,因为我只是修改了它.我不是从头开始写的。我也在使用碰撞检测工具包来查找发生碰撞的位置。
我想做的是让球(这是你用键盘在屏幕上移动的物体)击中墙壁或物体,它不会穿过墙壁或物体。
我对此的理解是,您正在找到发生碰撞的角度,然后您需要找到相邻的角度,即新向量并将对象推回它重叠的程度,但我不了解这个函数是如何工作的,例如什么是
vx0:Number = ball.vx * cos + ball.vy * sin;
发现?另外我不希望球加速我希望它的速度保持不变,直到它击中一个物体。向后搜索这个数组会更快吗?
-- 我感谢任何花时间尝试帮助我解决此问题的人,如果我有一些拼写错误,我深表歉意。
for(i = 0; i < collisions.length; i++)
{
var collision:Object = collisions[i];
var angle:Number = collision.angle;
var overlap:int = collision.overlapping.length;
var ball:Ball = collision.object1;
var sin:Number = Math.sin(angle);
var cos:Number = Math.cos(angle);
var vx0:Number = ball.vx * cos + ball.vy * sin;
var vy0:Number = ball.vy * cos - ball.vx * sin;
vx0 = .4;
ball.vx = vx0 * cos - vy0 * sin;
ball.vy = vy0 * cos + vx0 * sin;
ball.vx -= cos * overlap / ball.radius;
ball.vy -= sin * overlap / ball.radius;
}
【问题讨论】:
-
如果您关心的是速度,那么 iterating backwards 可能不会快很多,甚至可能会稍微慢一些——您需要对您的具体情况进行基准测试以了解更多信息
-
非常感谢您的评论。我会记住这一点。
标签: actionscript-3 collision-detection concept