试图让我的游戏的生活和游戏部分工作

时间:2015-11-05 07:42:47

标签: processing

我正在创建一个碰撞检测游戏,其中:

  • 每次我撞墙,我的生命都会减少。
  • 一旦我获得0点生命,游戏就结束了。

但这场比赛让我陷入了负面的生活。此外,一旦你获胜,我的点击开始似乎也没有...有人知道如何解决这个问题吗?

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;
  }
}

1 个答案:

答案 0 :(得分:0)

请注意,在您的鼠标第一次进入草图之前,mouseXmouseY都是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;上绘制游戏。到了屏幕。