我有一个名为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;
}
}
答案 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