当按下非空格键时,我如何确保导弹停留在屏幕上?



我需要编写一个处理程序,以便"当用户按下空格键时,一枚导弹从飞船前方发射并向右移动,直到离开屏幕。用户不能发射另一枚导弹,直到第一枚导弹从屏幕上消失。">

我所写的不允许导弹停留在屏幕上,如果按下其他键。我试过在void keyPressed()下添加函数,布尔值为真/假,这只会阻止整个程序的工作。

我如何确保它留在页面上?此外,我如何确保玩家不能发射另一枚导弹,直到他们之前的导弹移出屏幕?

这是我的代码:

//global
int ship_y;
int angle;
int missileX;
void setup(){
size(500, 500);
ship_y = 10;
missileX = 55;
}
void draw(){
background(175);
fill(50);
rectMode(CENTER);
rect(30, ship_y, 50, 25);

//missile moves rightwards after spacebar is pressed
if (key == ' '){
circle(missileX, ship_y, 25);
missileX = missileX + 1;
}
}
//ship moves down when 's' is pressed and up when 'w' is pressed
void keyPressed(){
if (key == 's'){
ship_y = ship_y + 2;
}
if (key == 'w'){
ship_y = ship_y - 2;
}
}

draw()函数中的代码每帧运行。所以每一帧,你都要清除背景,画出飞船,画出导弹。好。

。你把导弹绘制代码放在if语句中:
if (key == ' '){
,它只在最近按下的键是空格时绘制导弹。所以只要你按下不同的键,key不再等于空格,你的导弹就不会被画出来。

修复它的一种方法是创建一个变量来指示是否发射了导弹,并使用该变量来确定是否绘制导弹(而不是检查key变量)。

:

if (missileFired == true){
circle(missileX, ship_y, 25);
missileX = missileX + 1;
}

keyPressed()函数中的代码只在每次按下一个键时运行一次。这将是一个更好的地方,以检测何时按下空格键并打开missileFired标志:

void keyPressed(){
// code for other keypresses...
if(key == ' '){
missileFired = true;
}
}

要检测导弹何时离开屏幕,您只需要检查missileX是否大于窗口的宽度。draw()将是一个很好的地方,因为你可能想在每次导弹移动时检查它。

missileX大于窗口宽度时,您可以将missileFired重置为false,以便可以发射新导弹。你还需要重置missileX到它的原始位置,所以它起源于船的位置。

最新更新