所以我正在写一个游戏,但是我已经到了需要做一些碰撞响应的部分,而且我被困住了。我有一个算法可以找到物体的碰撞角度,碰撞深度意味着两个物体在一圈的重量。我明白我想做什么,那就是找到碰撞角度的垂直向量,并推回碰撞深度的碰撞对象,但我似乎无法正确写入。 这是我正在使用的代码。
var collision:Object = collisions[i];
var angle:Number = collision.angle;
var overlap:Number = collision.overlapping.length;
trace(overlap);
trace(angle);
var moveX = Math.cos(angle) * overlap;
var moveY = Math.sin(angle) * overlap;
obj2.x -= moveX;
obj2.y += moveY;
基本上我只是希望与墙碰撞的物体在碰到它时停止。
任何帮助将不胜感激。
答案 0 :(得分:0)
我曾经使用flash as3进行弹性碰撞。我试图修复重叠很多。但是我无法完全解决它们。它们没有正常重叠但是如果你强制使用它们会重叠。
如果你想查看我的作品,我上传了我的代码。你可以下载并查看我的代码。
如果你完全解决了这个问题,请告诉我解决方案。
swf(有摩擦,更问题):http://nafiz.in/collision/carpisma.swf
swf(没有摩擦,这比第一次没问题。):http://nafiz.in/collision/carpisma_surtunmesiz.swf
q:在鼠标位置添加一个球。 w,a,s,d:controll#1 ball。
单击鼠标而不重新移动并移动鼠标并重新启动。你选择了球。 按空格键时,选定的球将进入鼠标位置。
Cods:http://nafiz.in/collision/collision.rar
我希望你解决。
答案 1 :(得分:-1)
因此,经过几个小时的调整代码后,我想出了一个运行良好的解决方案。这是我的新代码:
public function Colisions(obj1,obj2) {
var collisions:Array=MyCollision.checkCollisions();
for (var i = 0; i < collisions.length; i++) {
var collision:Object=collisions[i];
var angle:Number=collision.angle;
var overlap:Number=collision.overlapping.length;
// finds the amount in x and y coordinates to move the ball back, and it devides overlap by 20 so that the ball does not jump as much.
var moveX=Math.cos(angle)*(overlap/20);
var moveY=Math.sin(angle)*(overlap/20);
// sets the ball to it's original location before the colision.
obj2.x=obj2.x-moveX;
obj2.y=obj2.y-moveY;
}
}
作为附注,我正在使用CDK代表碰撞检测工具包作为查找碰撞和与碰撞相关的信息的算法。