【问题标题】:Flixel Game Over ScreenFlixel 游戏屏幕
【发布时间】:2013-11-21 10:06:42
【问题描述】:

我是游戏开发的新手,但熟悉编程语言。我已经开始使用 Flixel 并且有一个有效的 Breakout 游戏,有得分和生命。

我只是纠结于如何在玩家生命耗尽的情况下创建新屏幕/跨屏幕游戏。我希望流程如下:

  1. 检查IF生命值等于等于0
  2. 暂停游戏并显示一个新屏幕(可能是透明的),上面写着“Game Over
  3. 当用户点击或点击ENTER重新启动关卡

这是我目前更新生活的功能:

private function loseLive(_ball:FlxObject, _bottomWall:FlxObject):void
{
    // check for game over
    if (lives_count == 0)
    {

    }
    else 
    {
        FlxG:lives_count -= 1;
        lives.text = 'Lives: ' + lives_count.toString()
    }
}

这是我的主要game.as

package
{
    import org.flixel.*;

    public class Game extends FlxGame
    {
        private const resolution:FlxPoint = new FlxPoint(640, 480);
        private const zoom:uint = 2;
        private const fps:uint = 60;

        public function Game()
        {
            super(resolution.x / zoom, resolution.y / zoom, PlayState, zoom);
            FlxG.flashFramerate = fps;
        }
    }
}

【问题讨论】:

    标签: user-interface game-engine flixel


    【解决方案1】:

    有多种方法可以做到这一点......

    您可以使用不同的 FlxStates,就像我在您的另一篇帖子的回答中所描述的那样:Creating user UI using Flixel,尽管您必须通过分数或其他任何事情变得聪明,或者使用 Registry-type setup

    如果您希望它像上面描述的那样实际工作,使用透明覆盖屏幕,您可以尝试这样的事情(请记住,具体细节可能因您的项目而异,我只是想告诉您一个想法):

    首先,确保您有良好的逻辑来启动关卡,假设它是一个名为 StartLevel 的函数。

    您需要定义一个标志 - 只是一个布尔值 - 用于跟踪游戏是否仍在进行:private var _isGameOver:Boolean;StartLevel() 的最后,将其设置为false

    PlayStatecreate() 函数中,构建一个新的 FlxGroup,其中包含您想要在 Game Over 屏幕上显示的所有内容 - 一些文本、图像和显示“按 ENTER 重新启动”的内容(管他呢)。然后将其设置为visible = false。其代码可能类似于:

    grpGameOver = new FlxGroup();
    grpGameOver.add(new FlxSprite(10,10).makeGraphic(FlxG.Width-20,FlxG.Height-20,0x66000000));  // just a semi-transparent black box to cover your game screen.
    grpGameOver.add(new FlxText(...)); // whatever you want to add to the group...
    grpGameOver.visible = false;
    add(grpGameOver); // add the group to your State.
    

    根据您的游戏设置方式,您可能还希望将组的 scrollFactor 中的对象设置为 0 - 如果您的游戏屏幕完全滚动:

    grpGameOver.setAll("scrollFactor", new FlxPoint(0,0));
    

    在您的update() 函数中,您需要将其分成两部分:一个用于游戏结束时,另一个用于游戏仍在进行中:

    if (_isGameOver)
    {
        if (FlxG.keys.justReleased("ENTER"))
        {
            grpGameOver.visible = false;
            StartLevel();
        }
    }
    else
    {
        ... the rest of your game logic that you already have ...
    }
    super.update();
    

    请记住,如果您在其他任何地方都有响应用户输入的东西 - 例如播放器对象或其他东西,您可能需要更改它们的 update() 函数以检查该标志。

    那么,您需要做的最后一件事是在您的loseLive() 逻辑中:

    if (lives_count == 0)
    {
        _isGameOver = true;
        grpGameOver.visible = true;
    }
    else 
    ...
    

    应该这样做!

    我强烈建议您花一些时间学习不同的教程和示例项目,以便总体上更好地了解 Flixel。 Photon Storm 有一些 great material 可以玩(尽管他已经跳到 HTML5 游戏)

    我还想指出,如果您对 Flixel 处理更新的方式感到满意,您可以使用您所在州的 update() 函数变得非常聪明,让它只在 grpGameOver 对象上调用更新,而不必更改所有其他对象单独更新。相当高级的东西,但值得学习。

    【讨论】:

    • 哇,感谢您提供如此详细的答案(并回答了我的其他问题,这对我很有帮助)我一定会稍后尝试并阅读您提供的教程。跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多