我有一个名为angleOfGun的float变量,其中包含屏幕上不断变化的枪的角度。我想在用户单击屏幕时在单独的float变量currentAngle中保存枪的角度。问题是,由于angleOfGun正在更改,因此currentAngle会继续使用angleOfGun更新。

您是否对如何将angleOfGun实例保存到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;
    }
}

最佳答案

在您的类中,您具有tick()方法,代码中包含以下行:

float currentAngle = angleOfGun;

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

09-11 20:04