Sea*_*ers 3 java eclipse processing
过去一周我一直在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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
if(movingBackward);
Run Code Online (Sandbox Code Playgroud)
就相当于告诉java如果什么也不做movingBackward就是true.因此,它会将花括号视为一个没有特定语法效果且始终处理的简单块.删除分号,它应该工作.
两个实例都有同样的问题
if (key == 's');
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢把打开支架在同一行if(或try,catch,else等...),这使得这样的错误更容易被发现.但这是首选.