如何优化我的Android Flash游戏?

时间:2013-12-13 07:00:37

标签: android actionscript-3 flash air

我有一个游戏,我转换为我的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);
            }
        }
    }
}

此代码始终循环以生成多个敌人。我的所有图像都已转换为位图。有没有其他方法可以让我的游戏没有滞后?它们越快,它们就越滞后,用户就不能再杀死它们了。请帮忙!

1 个答案:

答案 0 :(得分:0)

您可以进行某些优化(无论是否足够我无法分辨):

  1. 如果您已将所有内容转换为位图,则不需要cacheAsBitmap,因此请对此进行评论

  2. 不设置比例!这肯定会减慢速度。由于比例似乎总是1.5,只需调整图形大小

  3. 如果可能,请不要在每次迭代时设置tempEnemy.rotation。你能让tempEnemy成为一个在时间轴上“预旋转”每一帧的MovieClip吗?这对Flash来说会更有效率。如果仍然需要它来计算tempEnemy.x和y,则可以将旋转设置为MovieClip类中的Number属性。

  4. (你可以优化一些小的东西,比如在敌人循环中设置var K =(Math.PI / 180)* tempEnemy.rotation) - 但这不会让你获益很多)< / p>