如何计算Math.PI / 180一次并存储在变量中?

时间:2013-12-27 22:32:33

标签: actionscript-3 flash

如何在我的代码中计算Math.PI / 180并存储在变量中计算的数字,以便游戏循环不会多次重新计算?我是动作脚本的新手,我在游戏循环和计算过程中遇到了困难,所以如果你能告诉我这样做的代码呢?

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.y +=  (Math.cos((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed;
            if (tempEnemy.x < 10)
            {
                tempEnemy.x = 14;
            }
            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);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

由于您不打算在运行时更改此值,因此最好的办法是将其设置为常量值:

public static const PI_OVER_180: number = Math.PI / 180;

如果你在函数内部计算这个值,那么每次调用函数时你都会重新计算它,浮动数学是很昂贵的。如果你知道你经常需要一个数字并且它不会改变,那就把它变成一个常数。

答案 1 :(得分:0)

在这里,我简单地将Math.PI / 180的计算存储到您要求的变量中,并在代码的其他部分重用它。

function moveEnemies():void
{
    var tempEnemy:MovieClip;
    var halfPI:Number = Math.PI / 180;

    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.y +=  (Math.cos(halfPI*tempEnemy.rotation))*tempEnemy.speed;
            if (tempEnemy.x < 10)
            {
                tempEnemy.x = 14;
            }
            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);
            }
        }
    }
}