我正在创建一个碰撞检测游戏,其中:
但这场比赛让我陷入了负面的生活。此外,一旦你获胜,我的点击开始似乎也没有...有人知道如何解决这个问题吗?
PImage startScreen;
int gamestate=1;
int lives = 3;
class Sprite {
float x;
float y;
float dx;
float dy;
}
Sprite rect=new Sprite();
Sprite ball=new Sprite();
void setup(){
size(500,500);
rect.x = 500;
rect.y = 12;
ball.y= mouseY;
background(0);
fill(0,255,0);
text("Click to Begin", 10, 250);
}
void draw(){
if(gamestate ==0){
background(0);
fill(0, 255,0);
noStroke();
rect(0,235, 500,2.5);
rect(0,250, 500,2.5);
fill(0);
rect(0,238,rect.x,rect.y);
fill(0,255,0);
ellipse(mouseX, mouseY, 2,2);
text("lives left:"+lives, 10, 20);
if (mouseY<240 || mouseY>247){
background(0);
lives = lives-1;
if(lives <= 0){
text("Game Over. \nClick to Begin", 225,250);
gamestate=1;
}
}
if (mouseX >= 495){
background(0);
text("You Win! \nClick to Begin Again.", 225,250);
}
}
}
void mousePressed(){
if (gamestate ==1){
gamestate=0;
}
}
答案 0 :(得分:0)
请注意,在您的鼠标第一次进入草图之前,mouseX
和mouseY
都是0.因此,在draw()
函数中,当您检查{{1}时那是真的。你这样做每秒60次,所以你马上就失去了所有3个生命。
要解决这个问题,你可能想要一个&#34;起始矩形&#34;玩家必须单击以启动游戏,这样您就知道鼠标在窗口中。
之后,你必须让玩家有机会在开始下一轮之前回到起跑圈,否则你只会每秒失去60次生命。
基础可能看起来像这样:
mouseY < 240
请注意,我并不了解您的游戏应该做什么:您的安全区域&#34;只有7像素高,看起来很小。但假设这只是一个例子,我的答案应该归结为你的真实代码:
将游戏分成&#34;模式&#34;。您开始使用int gamestate=1; //1 is start screen, 0 is playing, 2 is between lives, 3 wins
int lives = 3;
class Sprite {
float x;
float y;
float dx;
float dy;
}
Sprite rect=new Sprite();
Sprite ball=new Sprite();
void setup() {
size(500, 500);
rect.x = 500;
rect.y = 12;
ball.y= mouseY;
}
void draw() {
background(0);
if (gamestate ==0) {
fill(0, 255, 0);
noStroke();
rect(0, 235, 500, 2.5);
rect(0, 250, 500, 2.5);
fill(0);
rect(0, 238, rect.x, rect.y);
fill(0, 255, 0);
ellipse(mouseX, mouseY, 2, 2);
text("lives left:"+lives, 10, 20);
if (mouseY<240 || mouseY>247) {
lives = lives-1;
gamestate=2;
if (lives <= 0) {
text("Game Over. \nClick to Begin", 225, 250);
gamestate=1;
}
}
if (mouseX >= 495) {
gamestate=3;
}
}
else if(gamestate == 1 || gamestate==2){
fill(0, 255, 0);
text("Click to Begin", 10, 230);
rect(0, 240, width, 7);
}
else if(gamestate == 3){
text("You Win! \nClick to Begin Again.", 225, 250);
}
}
void mousePressed() {
if (gamestate ==1 || gamestate == 2) {
if(mouseY>240 && mouseY<247){
gamestate=0;
}
}
}
变量执行此操作,但您还要混合事件代码和绘图代码。相反,让每个模式成为一个状态:开始屏幕,播放屏幕,生命之间的#34;屏幕,屏幕上的游戏。仅绘制该模式的内容,然后根据输入更改模式。基本上,而不是检查&#34;播放模式&#34;然后绘制&#34;游戏结束&#34;当你的生命耗尽时,只需切换到&#34;游戏模式&#34;让这部分代码在&#34;上绘制游戏。到了屏幕。