我有一个名为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
。通过创建增幅器,可以操纵此变量的值以满足任何需要。这种方法将有助于简化代码,并通过添加或删除方法使您能够灵活地进行进一步更改。