【问题标题】:How to call upon a gameOver method in a Java game when sprite "falls off" the screen?当精灵“从屏幕上掉下来”时,如何在 Java 游戏中调用 gameOver 方法?
【发布时间】:2009-02-09 00:17:57
【问题描述】:

我正在使用 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 方法。

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

非常感谢您,期待您的回答。

【问题讨论】:

  • 代码+cmets?听起来像我的家庭作业!
  • 嗯,这是一个评估项目。但是,我在常见问题解答中没有看到任何内容表明我不能提出有关家庭作业的问题,只要它清晰、详细且与编程相关。
  • 需要更多关于第二个 sn-p 中的 super() 调用的详细信息。什么是超类?另外,Utils.createPolygon() 返回什么?
  • super() 指的是 BasicPlayer 超类。 Utils.createPolygon() 生成我想要显示的精灵,引用自 Game 类。例如 - player = new Player(this);

标签: java methods screen


【解决方案1】:

让您开始:

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

检查边界:

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

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

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

【讨论】:

  • 我正在使用我的教练提供给我的游戏引擎,它处理玩家的物理。对于我的其他精灵,比如敌人,我使用了 setFloating 和 setGhostly 方法。在这里发布我的整个代码会很长。您有什么特别想看的部分来帮助您获得想法吗?
  • 嗯...听起来你可能不会在玩家的位置发生变化时收到物理引擎的通知,所以你必须在绘制精灵之前对其进行测试。你的主要游戏循环是什么样的?你的导师有没有给你任何其他关于在哪里做测试的提示?
  • 我用 player.putOn(ground);在游戏开始时将玩家放置在“地面”上,这是游戏世界中的实际形状。除了用于移动播放器的 KeyEvents 之外,其余的由引擎完成,不幸的是我无法控制。
  • ...如果没有,您到底能控制什么?你必须在游戏逻辑中找到一个可以测试玩家位置的地方。
  • 是的,我可以控制绘图,除了为我绘制的形状设置运动、速度等之外,这真的是关于它的。我将不得不和我的导师谈谈我能做什么和不能做什么的更多细节,所以我明天会试着找出答案。
【解决方案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();
    }

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

【讨论】:

  • 玩家没有边界区域。我应该使用 setBounds 方法吗?
【解决方案3】:

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

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

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

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

【讨论】:

  • 我正在尝试对我的精灵使用 getPosition 方法。但我需要一些方向。此外,我的世界仅使用我在游戏类的构造函数中设置的高度和宽度来限制。我对这一切都很陌生,所以我会很感激一些我应该寻找的例子。
  • 由于您可以控制高度和宽度,并且您可以获得所需的精灵的位置。如果精灵位于由矩形 (0,0)、(maxwidth,0)、(0, maxHeight)、(maxwidth,maxheight) 包围的任何空间,他就在地图上。如果他不在地图上,那么他就倒下了。
【解决方案4】:

你有游戏循环吗?

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

while(stillRunning)
{

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

   sleep(0);
}

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

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 2019-06-04
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2020-08-15
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多