我正在尝试使用AS3创建一个空中曲棍球游戏。
目前,我正在使用输入框架功能检查3个物体,2个拨片和一个球的位置,然后检查它们是否接触,如果是,则启动检测碰撞功能
然而,每次加载帧时都会检查,并且以25 fps的速度检查,这是非常多的,应用程序滞后。
有任何想法或更好的方法吗?
提前致谢。
答案 0 :(得分:1)
如果你需要定期检查一下,我想enterFrame事件是一种合适的机制。
你没有提到你是否使用内置命中测试功能,所以我想我会提到它们:hitTestObject和hitTestPoint。
答案 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的速度管理每帧两次调用。这听起来像是其他错误。