为什么,在我的游戏中,生命值在与正方形碰撞后立即减少到 0,而它应该减少 1

我正在尝试制作一个向您发送方块的游戏,您必须通过移动控制它们周围的圆圈的鼠标来避免它们。


我添加了一个生命值来为游戏添加更多,并设置碰撞检测,以便从圆的中心到正方形的距离小于圆的半径,它就带走了一个生命。这个碰撞检测有效,只是在我检测碰撞的 if 语句中我添加了“lives = living - 1;”,但是一旦它们发生碰撞,生命值立即下降到 0。


float centerY = 250;

float centerX = 175;

float lives = 3;

float rectY1 = random(0,500);

float rectX1 = random(0,500);

float rectY2 = random(0,500);

float rectX2 = random(0,500);

float rectY3 = random(0,500);

float rectX3 = random(0,500);

float rectY4 = random(0,500);

float rectX4 = random(0,500);

float rectY5 = random(0,500);

float rectX5 = random(0,500);

float rectY6 = random(0,500);

float rectX6 = random(0,500);


int score = 0;

int squareRadius = 15;


void setup(){

  size(500,500);

  background(155);

}



void draw(){

  boolean gameOver = false;

  boolean lifeLost = false;


  background(155);


  fill(149,185,215);

  ellipse(centerX,centerY,30,30);


  centerX = mouseX;

  centerY = mouseY;

  fill(0);

  rect(rectX1,rectY1,30,30);

  rect(rectX2,rectY2,30,30);

  rect(rectX3,rectY3,30,30);

  rect(rectX4,rectY4,30,30);


  rectX1 = rectX1 - 5;

  rectX2 = rectX2 - 5;

  rectX3 = rectX3 - 5;

  rectX4 = rectX4 - 5;

  rectX5 = rectX5 - 5;


  if(rectX1 + 30 < 0){

    rectX1 = 500;

    rectY1 = random(0,600);

    score = score + 1;

  }

  if(rectX2 + 30 < 0){

    rectX2 = 500;

    rectY2 = random(0,600);

    score = score + 1;

  }

  if(rectX3 + 30 < 0){

    rectX3 = 500;

    rectY3 = random(0,600);

    score = score + 1;

  }

  if(rectX4 + 30 < 0){

    rectX4 = 500;

    rectY4 = random(0,600);

    score = score + 1;

  }

  if(rectX5 + 30 < 0){

    rectX5 = 500;

    rectY5 = random(0,600);

    score = score + 1;

  }

  if(dist(mouseX,mouseY,rectX1,rectY1) < 30){

    lifeLost = true;

  }

  if(dist(mouseX,mouseY,rectX2,rectY2) < 30){

    lifeLost = true;

  }

  if(dist(mouseX,mouseY,rectX3,rectY3) < 30){

    lifeLost = true;

  }

  if(dist(mouseX,mouseY,rectX4,rectY4) < 30){

    lifeLost = true;

  }

  if(lifeLost == true){

    lifeLost = false;

    lives = lives - 1;

  }

  if(lives == 0 || lives < 0){

    gameOver = true;

  }


慕容森
浏览 158回答 2
2回答

陪伴而非守候

我建议在减少生命值后立即将玩家移动到离方块足够远的地方,这样它不会不断减少生命直到它达到 0。生命立即下降到零,因为没有足够的缓冲时间玩家停止与方块接触,因此,只要玩家与方块接触,生命点就会不断被带走。

白板的微信

正如 кιмσтσ 所说,当玩家与方块接触时,生命计数器会不断减少。如果您确实像 dave 提到的那样投入时间学习使用调试器,那么您应该能够逐步完成draw函数的迭代并注意到生命计数器实际上每次调用该函数都会减少 1!问题是玩家仍然与方块保持接触,并且在此期间仍然可以损坏。有几种方法可以解决这个问题:最简单和最明显的方法是在下一次调用之前将玩家传送到安全的地方,draw或者只是删除对他们造成伤害的方格,但这可能会显得不雅。一个更有趣的方法是改变玩家的状态,这样他们就不会失去生命,然后在设定的时间过去后改变状态。这可能实现起来有点棘手,但可能会证明是一个有趣的挑战!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java