我需要检查一个物体是否在远处以将其显示到屏幕上(它是一个横向卷轴视频游戏)
到目前为止,我有这个:
for ( var i=0; i < Coins.length; i++ )
{
var obj = Coins[i];
if ( worldObj.distance > obj.distance && worldObj.distance < obj.distance + canvas.height )
{
DrawCoins(obj);
}
}
其中 worldObj.distance 是玩家走过的距离,obj.distance 是物体的距离。
问题:
由于关卡中的硬币数量(超过 10,000 个),此 for 循环会导致移动设备上的性能大幅下降,并且每秒执行 60 次(60 fps)
我怎样才能解决这个问题?
谢谢!:)
编辑:尝试在循环之前将 canvas.height 缓存到变量中(例如: var height = canvas.height; )。没有性能差异(I5 2500K 上的 44 毫秒与 44 毫秒,想象一下在移动设备上!!)。
编辑:尝试在循环之前缓存 Coins.length,(例如: var len = Coins.length; )。没有性能差异(44 ms vs 44 ms)。
编辑:这就是我创建硬币的方式:
for(var i=0; i<10000; i++)
{
/* Coins */
for ( var z=0; z < 6; z++ )
{
if ( RNG(0,100) < Upgrades.coinChance ) // random number generator, Upgrades.coinChance = 5; -> 5% chance
{
Coins.push({ active: 1, type: "Gold", cash: 5, x: 60*(z+1), distance: i*RNG(20,100) });
}
}
}