繁体   English   中英

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

[英]How to call upon a gameOver method in a Java game when sprite “falls off” the 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方法。

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

非常感谢你,我期待着你的回答。

为了帮助您入门:

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

检查边界:

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

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

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

为了帮助你做功课:

   // 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();
    }

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

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

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

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

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

你有游戏圈吗?

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

while(stillRunning)
{

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

   sleep(0);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM