我对编程很陌生并决定制作一个小游戏,到目前为止我只制作了一个能够在所有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块中有很多好的影响。当我在窗口中间移动它不再停止时,程序不再停止,现在只有在我经常碰到窗口边界的情况下才会这样做。也许它与约束有关?
答案 0 :(得分:0)
a
中的(java命名约定指定方法名称以小写字母开头),您应该在找到的第一个键上退出。可以重新组织代码以减少多个相同的条件:
move()
答案 1 :(得分:0)
我猜这个程序没有停止工作"或结束 - 你的矩形停止移动。如果您松开所有按键,只需按一个按键,我就打赌矩形会再次开始移动。 (将来,请尝试更具体 - 说"它停止工作"非常有帮助。)
无论如何,这是因为你处理按键的方式。如果按下您正在检查的密钥以外的密钥会怎样?
您将输入move()
功能,并且您将输入if(keyPressed)
块,但如果其他if
语句,您将无法输入任何内容在那个街区里面。 key
变量仅保存最近按下的键。
根据您要执行的操作,您应该将这些if
语句重构为更改如果密钥有效的方向,并忽略所有其他按键操作。或者,您可能希望使用一组boolean
变量来跟踪同时按下的多个键。有关该方法的更多信息可以在here找到。
如果您仍然无法使其正常运行,请尝试更准确地了解具体情况。