当sprite“掉落”屏幕时,如何在Java游戏中调用gameOver方法?

时间:2009-02-09 00:17:58

标签: java methods screen

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

在接下来的几周内,我将发布一些问题,寻求这个项目的帮助,因为我不太熟悉编程。所以我希望我不会烦恼,如果你能帮助我,我将非常感激。

在我的游戏中,我有一个gameOver方法,它结束游戏并向控制台输出一个语句。我想要的是当我的播放器精灵“掉落”屏幕时调用此方法。

现在,我在屏幕底部放置了一个矩形形状来表示某种危险(如水),当玩家与之碰撞时,它会调用gameOver方法,游戏结束。但是,如果玩家跌破屏幕的某个高度,我仍然会更喜欢游戏结束。

这是我的gameOver方法(来自'Game'类) -

/** 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 个答案:

答案 0 :(得分:3)

为了帮助您入门:

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

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

    4. 供参考:请发布您已经尝试过的内容以及遇到问题的地方。要求一个勺子解决方案对任何人都没有帮助 - 你将不得不自己考虑一下这个问题。如果您不知道从哪里开始,请告诉我们相反;我们可以试着引导你朝着正确的方向前进。

      更新:听起来你已经做了一些思考,这太棒了!对不起,如果我苛刻地跳下你的喉咙,但你原来的帖子建议不然。但是,下一次尝试提出一个更多帮助我自己的帮助问题而不是解决它的问题。一个简单的“有人能让我知道如何开始解决这个问题吗?”会做的。

答案 1 :(得分: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();
    }

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

答案 2 :(得分:2)

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

接下来的问题是,“我的世界有什么界限?”。

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

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

答案 3 :(得分:1)

你有游戏圈吗?

通常在游戏中有一些控制逻辑和渲染过程的紧凑循环,类似于。

while(stillRunning)
{

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

   sleep(0);
}

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