保存不断变化的变量的实例

时间:2014-10-17 04:07:43

标签: java

我有一个名为angleOfGun的浮点变量,它包含屏幕上持枪的角度。当用户在单独的浮动变量currentAngle中单击屏幕时,我想保存枪所处的角度。问题是,currentAngle不断用angleOfGun更新,因为angleOfGun正在改变..

您是否有任何关于如何在设置初始值后将currentOfGun实例保存到currentAngle而不再更新currentAngle的想法?谢谢!

    float angleOfGun = 1;

    //boolean for direction of rotation
    boolean clockwise = false;

 /**
 * Action to perform on clock tick
 * 
 * @param g the canvas object on which to draw
 */
public void tick(Canvas g) {

    int height = g.getHeight();
    int width = g.getWidth();

    //rotate/draw the gun
    g.save();
    g.rotate(angleOfGun, width - 5, 5);
    g.drawRect(new RectF(width - 40, 0, width, 60), bluePaint);
    g.restore();

    if(ballPosition != null)
    {
        float currentAngle = angleOfGun;
        g.save();
        g.rotate(currentAngle, width - 5, 5);
        ballPosition.x = ballPosition.x - ballVelocity.x;
        ballPosition.y = ballPosition.y - ballVelocity.y;
        g.drawCircle(ballPosition.x, ballPosition.y, 10, greenPaint);
        g.restore();
    }

    if(clockwise)
    {
        angleOfGun = (angleOfGun - 1) % 360;
        if(angleOfGun == 0)
        {
            clockwise = false;
        }
    }
    else
    {
        angleOfGun = (angleOfGun + 1) % 360;
        if(angleOfGun == 90)
        {
            clockwise = true;
        }
    }


}


 /**
 * callback method, run when when surface is touched
 */
public void onTouch(MotionEvent event) {
    if(ballPosition == null && shoot == false)
    {
        shoot = true;
        ballPosition = new PointF(0,0);
        ballVelocity = new PointF(0,0);
        ballPosition.x = 1280;
        ballPosition.y = 0;
        ballVelocity.x = 0;
        ballVelocity.y = -5;
    }
}

3 个答案:

答案 0 :(得分:1)

在您的课程中,您有方法tick(),代码中有一行:

float currentAngle = angleOfGun;

因此,您不断将angleOfGun的值分配给currentAngle。因此,在您的代码中声明后,您只需在代码中使用currentAngle代替angleOfGun(反之亦然),这对任何内容都没有影响,因为它们都存储相同的值即可。
别忘了Java是OOP语言,所以你可以利用它。我的方法是创建一个名为Angle的类,其中我可以拥有private static float currentAngle字段和private float gunAngle。通过创建mutator,可以操纵这些变量的值以满足任何需要。这种方法有助于简化代码,并且可以通过添加或删除方法为您提供进一步更改的灵活性。

答案 1 :(得分:0)

我会创建另一个变量gunLocked(boolean)。设置喷枪角度时,只需将其锁定,然后测试是否锁定。如果不更新,否则执行。

if(ballPosition != null)
{
    if (!gunLocked)
    {
        float currentAngle = angleOfGun;

        gunLocked = true;

        g.save();
        g.rotate(currentAngle, width - 5, 5);
        ballPosition.x = ballPosition.x - ballVelocity.x;
        ballPosition.y = ballPosition.y - ballVelocity.y;
        g.drawCircle(ballPosition.x, ballPosition.y, 10, greenPaint);
        g.restore();
    }
}

当然这意味着您必须创建另一种方法来解锁枪(可能是按下按钮?例如当用户移动枪时)

答案 2 :(得分:0)

因为你理想地使用原始类型,所以不应该发生。试试这个:

declare currentAngle also globally like angleOfGun