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

时间:2015-07-02 15:25:14

标签: 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;
        }
    }
}

}

1 个答案:

答案 0 :(得分:5)

if(movingBackward);

如果movingBackwardtrue,您实际上是在告诉java什么都不做。因此,它会将花括号视为一个没有特定语法效果且始终处理的简单块。删除分号,它应该工作。

的两个实例都有同样的问题
if (key == 's');

我个人更喜欢将开口大括号放在与if(或trycatchelse等...相同的行上,这会犯错误这些更容易发现。但这是首选。