閱讀了很多關於球物理學的知識後,請觀看一些示例和嘗試使用位圖製作彈球的幾天,我需要幫助。我使用簡單(易於使用)和快速性能物理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