2

我正在使用 BlueJ 用 Ja​​va 开发一个简单的平台游戏。

在接下来的几周内,我将发布一些问题,寻求这个项目的帮助,因为我对编程不是很精通。所以我希望我不会变得烦人,如果你能帮助我,我将非常感激。

在我的游戏中,我有一个 gameOver 方法,它结束游戏并向控制台打印一条语句。我想要的是当我的播放器精灵“从屏幕上掉下来”时调用这个方法。

现在我在屏幕底部放置了一个矩形来表示某种危险(如水),当玩家与它发生碰撞时,它会调用 gameOver 方法并且游戏结束。但是,如果玩家跌落到屏幕的某个高度以下,我仍然希望游戏结束。

这是我的 gameOver 方法(来自“游戏”类)-

/** End the game. */
public void gameOver()
{
    world.terminate();
    isOver = true;
}

这是我的玩家精灵(目前使用多边形绘制)-

super(Utils.createPolygon(170, 102,
    155, 118, 137, 118, 151, 134, 146,
    140, 167, 140, 170, 135, 174, 140,
    193, 140, 188, 134, 202, 118, 186,
    118, 170, 102)); 
setColor(new Color(254, 167, 184));

这是当玩家与敌人碰撞时结束游戏的代码(来自“Enemy”类,类似的代码也用于 Hazard 类)-

if (e.contact.involves(player) && (player.getLives() < 1)) {
    System.out.println("YOU ARE DEAD!");
    game.gameOver();
}

我想要一个类似的,或者至少是简单的解决方案,当我的玩家精灵跌落或超出屏幕的某个坐标时,它会调用我的 gameOver 方法。

如果您能提供一个示例/示例代码,并附上注释以帮助我理解它,我将不胜感激,以便了解我应该如何实现这一目标。

非常感谢您,我期待您的答复。

4

4 回答 4

3

为了让你开始:

  1. 想想如何获得玩家的当前位置。
  2. 想想是什么让玩家跌倒(应该有一些方法/类来实现重力和下落?)
  3. 检查玩家的位置,因为他们落在你的世界的边界上。如果他们在边界之外,是时候调用你的 GameOver 方法了。

检查边界:

  1. 你的世界应该有一个玩家必须保持在上面才能生存的最小高度。记住这个值。
  2. 如果你得到你的玩家的垂直位置并与这个最小高度进行比较,你应该得到一个布尔结果(安全与死亡)。
  3. 请注意,屏幕位置从左上角开始,并随着您向右和向下移动而增加,因此您的玩家位置可能反映了这一点。因此,您很可能正在寻找测试 ( player.getPosition().Y > world.getMaxAllowedHeight());

供参考:请发布您已经尝试过的内容以及遇到问题的地方。寻求解决方案不会帮助任何人——你必须自己考虑一下。如果您不知道从哪里开始,请告诉我们;我们可以尝试引导您朝着正确的方向前进。

更新:听起来你已经做了一些思考,太棒了!对不起,如果我粗暴地跳到你的喉咙里,但你原来的帖子却另有建议。不过,下一次,请尝试问一个更多的帮助我帮助我自己的问题,而不是一个为我解决的问题。一个简单的“有人可以告诉我如何开始解决这个问题吗?” 会做。

于 2009-02-09T00:39:22.383 回答
2

为了帮助你做功课:

   // if the player goes out of bounds, the game is over
   if (player.getBounds().outside(game.getBounds()) 
   {
        System.out.println("YOU WENT OUT!");
        game.gameOver();
    }

假设玩家有某种边界区域,而游戏本身也有某种区域......

于 2009-02-09T00:36:06.993 回答
2

问自己的一个好问题是,“我的精灵在哪里?”。

下一个问题是,“我的世界的边界是什么?”。

如果你能回答这两个问题,那么你应该能够回答你自己的问题。

假设你有一个二维世界,只要精灵的位置在水平边界内和垂直边界内,那么你的精灵仍然在地图上,否则,他不在。

于 2009-02-09T00:38:36.860 回答
1

你有游戏循环吗?

通常在游戏中会有某种紧密循环来控制逻辑和渲染过程,例如。

while(stillRunning)
{

   if(isPlayerDead()) 
   { 
       showGameOverScreen(); 
   }
   else
   {
       PerformLogic();
       RenderToScreen();
   }

   sleep(0);
}

您需要扩展 isPlayerDead() 方法以检查碰撞以及精灵的位置是否大于屏幕高度。

于 2009-02-09T01:09:49.593 回答