过去一周我一直在使用Java,我正在参加一个在线/离线课程,在那里我们使用Processing。该代码应该创建一个基于用户输入在屏幕上飞行的火箭。然而,它总是向后飞,而防止它向后飞的唯一方法是向前推进。即便如此,它只会停滞不前。通过一些测试,我们发现movingBackward变量不断被触发,但似乎没有理由。我的老师和我很难过,并且非常感谢任何建议/建议。
package processing2;
import processing.core.PApplet;
public class Processing2 extends PApplet
{
private static final long serialVersionUID = 1L;
public float rotationAmount = 180;
public boolean rotateLeft = false;
public boolean rotateRight = false;
public float speed = 10;
public float x = 400;
public float y = 350;
public boolean moveForward = false;
public boolean movingBackward = false;
public boolean moving = false;
public void setup()
{
size(800, 700);
}
public void draw()
{
background(255, 255, 255);
move();
changeRotation();
translate(x, y);
rotate(rotationAmount);
drawRocketShip();
}
public int rocketX = 0;
public int rocketY = 0;
public void drawRocketShip()
{
stroke(0, 149, 185);
fill(0, 149, 185);
rect(rocketX, rocketY, 75, 50);
triangle(rocketX + 75, rocketY + 1, 100, rocketY + 25, rocketX + 75, rocketY + 49);
fill(255, 255, 255);
ellipse(rocketX + 60, rocketY + 25, 30, 15);
stroke(0, 149, 185);
strokeWeight(3);
fill(255, 255, 255);
triangle(rocketX + 25, rocketY, rocketX - 15, rocketY - 25, rocketX, rocketY);
triangle(rocketX + 25, rocketY + 50, rocketX - 15, rocketY + 75, rocketX, rocketY + 50);
if(moving)
{
fill(255, 0, 0);
noStroke();
triangle(rocketX - 10, rocketY + 10, rocketX - 30, rocketY + 25, rocketX - 10, rocketY + 40);
}
}
public void keyPressed()
{
if(key == 'a')
{
rotateLeft = true;
}
if(key == 'd')
{
rotateRight = true;
}
if(key == 'w')
{
moveForward = true;
moving = true;
}
if (key == 's');
{
movingBackward = true;
moving = true;
}
}
public void keyReleased()
{
if(key =='a')
{
rotateLeft = false;
}
if(key == 'd')
{
rotateRight = false;
}
if(key == 'w')
{
moveForward = false;
moving = false;
}
if (key == 's');
{
movingBackward = false;
moving = false;
}
}
public void move()
{
if(moveForward)
{
x += speed * cos(rotationAmount);
y += speed * sin(rotationAmount);
}
if(movingBackward);
{
x += -speed * cos(rotationAmount);
y += -speed * sin(rotationAmount);
}
}
public void changeRotation()
{
if(rotateLeft)
{
rotationAmount -= .08;
if(rotationAmount < 0)
{
rotationAmount = 2 * PI;
}
}
if(rotateRight)
{
rotationAmount += .08;
if(rotationAmount > 2* PI)
{
rotationAmount = 0;
}
}
}
}
答案 0 :(得分:5)
if(movingBackward);
如果movingBackward
为true
,您实际上是在告诉java什么都不做。因此,它会将花括号视为一个没有特定语法效果且始终处理的简单块。删除分号,它应该工作。
的两个实例都有同样的问题
if (key == 's');
我个人更喜欢将开口大括号放在与if
(或try
,catch
,else
等...相同的行上,这会犯错误这些更容易发现。但这是首选。