我的程序似乎停止工作

时间:2017-09-20 08:07:50

标签: processing

我对编程很陌生并决定制作一个小游戏,到目前为止我只制作了一个能够在所有4个方向(左,右,上,下)移动的小块。很简单,没什么特别的。但是,当我运行我的程序时,它有时会停止工作,而不是崩溃导致Processing本身崩溃,但我的程序才会结束。

就我的测试而言,我认为当我同时按下两个键时会发生这种情况(如W和S)。有没有人碰巧知道是什么导致它停止,也许还有如何解决它?

void setup(){
  size(1080,720);
  frameRate(30);
}
int shipLR = 0; //Variable for the ship to go left/right
int shipUD = 0; //Variable for the ship to go up / down


void draw(){
  background(0);
  shipLR = constrain(shipLR, 0, 1040); //Constrain the ship in the window
  shipUD = constrain(shipUD,0,680); // Constrain the ship in the window
  move();
  Shuttle();
}

void Shuttle(){
  rect(shipLR, shipUD, 40,40); //Draw the ship
}

void move(){
  if (keyPressed) {
    if (key == 'a') {
      shipLR = shipLR - 20; // Go left
      return;}
    if (key == 'd') {
      shipLR = shipLR + 20; // Go right
      return;}
    if (key == 'w'){
      shipUD = shipUD - 20; // Go up
      return;}
    if (key == 's') {
      shipUD = shipUD + 20; // Go down
      return;}
  }
}

非常感谢任何帮助。

编辑:我发现了导致此问题更频繁发生的事情;如果我实现一个值低于60的frameRate(目前尝试使用30),则会更频繁地发生这种情况。

编辑2:以下建议使我的移动功能在单个if块中有很多好的影响。当我在窗口中间移动它不再停止时,程序不再停止,现在只有在我经常碰到窗口边界的情况下才会这样做。也许它与约束有关?

2 个答案:

答案 0 :(得分:0)

a中的

(java命名约定指定方法名称以小写字母开头),您应该在找到的第一个键上退出。可以重新组织代码以减少多个相同的条件:

move()

答案 1 :(得分:0)

我猜这个程序没有停止工作"或结束 - 你的矩形停止移动。如果您松开所有按键,只需按一个按键,我就打赌矩形会再次开始移动。 (将来,请尝试更具体 - 说"它停止工作"非常有帮助。)

无论如何,这是因为你处理按键的方式。如果按下您正在检查的密钥以外的密钥会怎样?

您将输入move()功能,并且您将输入if(keyPressed)块,但如果其他if语句,您将无法输入任何内容在那个街区里面。 key变量仅保存最近按下的键。

根据您要执行的操作,您应该将这些if语句重构为更改如果密钥有效的方向,并忽略所有其他按键操作。或者,您可能希望使用一组boolean变量来跟踪同时按下的多个键。有关该方法的更多信息可以在here找到。

如果您仍然无法使其正常运行,请尝试更准确地了解具体情况。