我有一个游戏,我转换为我的Android手机。我尝试了两种渲染,并发现CPU模式对于我的游戏类型来说比GPU更好。在GPU模式下,游戏有很多延迟,并且图形不像CPU模式那样尖锐。游戏的目的是杀死来自屏幕顶部的敌人,然后才能击中底部。当游戏开始时,它根本没有延迟,但是当屏幕上有一些敌人并且它们开始下降得更快时它开始滞后。这是产生敌人的代码:
function makeEnemies():void
{
var chance:Number = Math.floor(Math.random() * 150);
if (chance <= level && enemies.length < 4)
{
tempEnemy = new Enemy();
tempEnemy.x = Math.round(Math.random() * 480);
tempEnemy.cacheAsBitmap = true;
addChild(tempEnemy);
tempEnemy.scaleX = 1.5;
tempEnemy.scaleY = 1.5;
enemies.push(tempEnemy);
tempEnemy.speed = enemyBaseSpeed + ((level - 1) * speedLevelInc);
if (tempEnemy.speed > MAX_SPEED)
{
tempEnemy.speed = MAX_SPEED;
}
}
}
function moveEnemies():void
{
var tempEnemy:MovieClip;
for (var i:int =enemies.length-1; i>=0; i--)
{
tempEnemy = enemies[i];
if (tempEnemy.dead)
{
score++;
score++;
roachLevel.score_txt.text = String(score);
enemies.splice(i,1);
}
else
{
tempEnemy.rotation += (Math.round(Math.random()*.4));
tempEnemy.x -= (Math.sin((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed;
tempEnemy.y += (Math.cos((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed;
if (tempEnemy.x < 10)
{
tempEnemy.x = 11;
}
if (tempEnemy.x > stage.stageWidth - offset)
{
tempEnemy.x = stage.stageWidth - offset;
}
if (tempEnemy.y > stage.stageHeight)
{
removeEnemy(i);
lives--;
roachLevel.lives_txt.text = String(lives);
}
}
}
}
此代码始终循环以生成多个敌人。我的所有图像都已转换为位图。有没有其他方法可以让我的游戏没有滞后?它们越快,它们就越滞后,用户就不能再杀死它们了。请帮忙!
答案 0 :(得分:0)
您可以进行某些优化(无论是否足够我无法分辨):
如果您已将所有内容转换为位图,则不需要cacheAsBitmap,因此请对此进行评论
不设置比例!这肯定会减慢速度。由于比例似乎总是1.5,只需调整图形大小
如果可能,请不要在每次迭代时设置tempEnemy.rotation。你能让tempEnemy成为一个在时间轴上“预旋转”每一帧的MovieClip吗?这对Flash来说会更有效率。如果仍然需要它来计算tempEnemy.x和y,则可以将旋转设置为MovieClip类中的Number属性。
(你可以优化一些小的东西,比如在敌人循环中设置var K =(Math.PI / 180)* tempEnemy.rotation) - 但这不会让你获益很多)< / p>