阅读了很多关于球物理学的知识后,请观看一些示例和尝试使用位图制作弹球的几天,我需要帮助。我使用简单(易于使用)和快速性能物理AS3引擎的位图http://coreyoneil.com/portfolio/index.php?project=5,但仍然无法解决以下问题:如果球移动太快而对象路径太小,则不会有碰撞检测(代码只能完美工作与更大的物体或如果球移动较慢)。我不善于物理和数学。下面是功能代码,这使得物理的球上的各帧速率(但也许它能够更好地将其更改为的setTimeout):Flash AS3 - 球物理学(快速移动和路径上的小物体)
function showFrame(e:Event) // onEnterFrame
{
var collisions:Array = collisionlist.checkCollisions();
if(collisions.length) // if collision
{
var collision:Object = collisions[0]; // get collision information
var angle:Number = collision.angle; // get collision angle
var overlap:int = collision.overlapping.length; // get collision overlap
var sin:Number = Math.sin(angle);
var cos:Number = Math.cos(angle);
var vx0:Number = vx * cos + vy * sin;
var vy0:Number = vy * cos - vx * sin;
vx0 = ((mass - immovable) * vx0)/(mass + immovable); // var immovable:Number=10000; var mass:Number=immovable*2;
vx = vx0 * cos - vy0 * sin;
vy = vy0 * cos + vx0 * sin;
vx -= cos * overlap/radius; // radius=Math.round(ball.width/2);
vy -= sin * overlap/radius;
vx += speed; // var speed:Number=0;
}
vy += gravity; // var gravity:Number=0.75;
vy *= friction; // var friction:Number=0.981;
vx *= friction;
ball.x += vx;
ball.y += vy;
//setTimeout(showFrame, 20);
}
非常有用。我应该把质量变成价值1,导致球有时会卡住(现在它反弹得更多)。我需要更好地测试它,但是现在的代码现在可以在任何移动时与1个像素对象发生碰撞。我将发布当前代码更改与信贷。 – speedy 2012-04-01 07:18:07
太棒了,唯一要记住的是,在为一个游戏世界(5至20个以上的对象)做这些之后,它可能需要一点点的表现。因此,如果您有10个碰撞对象,并且您需要5个步骤,则每帧将进行50次碰撞测试。 – 2012-04-02 01:23:58