检测Flash中的碰撞......或者更好的方法

时间:2011-01-04 15:06:51

标签: flash actionscript-3 collision-detection

我正在尝试使用AS3创建一个空中曲棍球游戏。

目前,我正在使用输入框架功能检查3个物体,2个拨片和一个球的位置,然后检查它们是否接触,如果是,则启动检测碰撞功能

然而,每次加载帧时都会检查,并且以25 fps的速度检查,这是非常多的,应用程序滞后。

有任何想法或更好的方法吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

如果你需要定期检查一下,我想enterFrame事件是一种合适的机制。

你没有提到你是否使用内置命中测试功能,所以我想我会提到它们:hitTestObjecthitTestPoint

答案 1 :(得分:1)

你试过计时器吗?

var timer:Timer = new Timer(250); // 4 times a second

timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();


private function onTimer(ev:TimerEvent):void
{
  checkCollision();
}

答案 2 :(得分:1)

两个毕达哥拉斯的声明正在减慢你的游戏速度?在25fps?出了点问题 - 应该

完全删除碰撞检测并检查是否恢复了25fps,然后一次添加一行语句,直到再次出现减速。

检查您是否每帧不多次(好,两次)调用碰撞代码。

请记住,您可以测试进行碰撞而不使用Math.sqrt

function circlesTouching(circle1:Point, circle1Radius:Number, circle2:Point, circle2Radius:Number):Boolean {
    var dx:Number = circle1.x - circle2.x;
    var dy:Number = circle1.y - circle2.y;
    var minDist:Number = circle1Radius + circle2Radius;
    return (dx*dx) + (dy*dy) < (minDist * minDist);
}

(你仍然需要sqrt来解决碰撞,但这应该是非常罕见的。)

然而根据我的经验,即使Math.sqrt是毕达哥拉斯最慢的部分,它仍然足够快,足以以25fps的速度管理每帧两次调用。这听起来像是其他错误。

相关问题