Javascript(gameQuery游戏)objs太多,无法正常运行

Javascript(gameQuery游戏)objs太多,无法正常运行,javascript,gamequery,Javascript,Gamequery,我正在用“gameQuery”jQuery插件写一个js游戏,一个射击游戏 虽然有许多项目符号(例如100个或更多),但动画的旋转速度会非常慢 我使用代码blow循环移动DOM,意思是每20毫秒执行一次函数。所有子弹都存储在一个数组中 $.playground().registerCallback(function(){ for(var i = 0; i < bulletList.length; i++) { //move bullet ... } }, 2

我正在用“gameQuery”jQuery插件写一个js游戏,一个射击游戏

虽然有许多项目符号(例如100个或更多),但动画的旋转速度会非常慢

我使用代码blow循环移动DOM,意思是每20毫秒执行一次函数。所有子弹都存储在一个数组中

$.playground().registerCallback(function(){
   for(var i = 0; i < bulletList.length; i++) {
     //move bullet
     ...
   }
}, 20);
$.playerly().registerCallback(函数(){
对于(变量i=0;i

如何优化代码以提高效率?谢谢

以下是我能想到的几件事:

  • 你在用子弹进行碰撞检测吗。如果是,这是 可能是因为显示了数百个,所以速度变慢了 精灵的死亡本身就是个问题
  • 这些项目符号是否已设置动画(具有多个帧?) 想要尝试不使用动画,看看这会如何影响 表演
  • 如果所有的子弹都以相同的速度朝着相同的方向移动,那么 可以将它们全部放在一个组中,然后移动该组
  • 如果它们不朝同一方向移动,你仍然可以将它们放入 一群。然后,您将分离此组,然后再将其全部移动。 完成后,您可以将组再次附加到游戏中
  • 这一个实现起来更复杂,但您可以尝试 检测玩家向常规目标发射了一系列子弹 在给定方向上的间隔,并用单个 具有重复的子弹图像的精灵

  • 如果还没有,您可以使用CSS3来设置子弹的动画。CSS3动画利用GPU。另外,计算长度一次,而不是每次迭代<代码>用于(变量i=0,len=bulletList.length;i
    var len=bulletList.length;虽然(len--){//move bullet}
    但是我认为你过于关注微优化了。Thx@塞利姆。1.所有的子弹都是敌人的,我没有做任何碰撞检测。2.虽然所有的子弹都放在一组,但每颗子弹都有自己的方向。所以我每次都要用“for”或“while”来表达,我想这就是事情慢下来的关键。我还是想不出解决办法。你试过这个吗。假设你所有的子弹都在一个叫做“子弹”的组中。您可以使用以下命令拆离组:项目符号=$(“#项目符号”).detach();然后,您将像以前一样更改所有子弹的位置。最后,您将使用项目符号.appendTo(parentGroup)将项目符号组附加回文档。告诉我它是否有用。我使用了您的方法,使用detach()的效果不明显。而且,在detach()之后,我无法删除外部项目符号,除非我再次附加它。:)我想出了一个更好的方法:window.setTimeout(function(){bulletMove(bullet)},50);在递归中使用setTimeout,结果非常好,我放弃了“while”语句,因为这里效率低下。现在,即使屏幕上有300或400颗子弹,事情也不会慢下来。谢谢你的帮助!哈哈~