尽管缺少输入,但在处理过程中接收的常量输入 - Java

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)

}

Dra*_*ikk 5

if(movingBackward);
Run Code Online (Sandbox Code Playgroud)

就相当于告诉java如果什么也不做movingBackward就是true.因此,它会将花括号视为一个没有特定语法效果且始终处理的简单块.删除分号,它应该工作.

两个实例都有同样的问题

if (key == 's');
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢把打开支架在同一行if(或try,catch,else等...),这使得这样的错误更容易被发现.但这是首选.