屏幕上的弗利克塞尔游戏



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

我只是坚持如果玩家的生命耗尽,如何在屏幕上创建新的屏幕/游戏。我希望这个过程如下:

  1. 检查生命值是否等于 0
  2. 暂停游戏并显示一个新屏幕(可能是透明的),上面写着"游戏结束"
  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;
        }
    }
}

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

你可以使用不同的FlxState,就像我在另一篇文章的回答中所描述的那样:使用Flixel创建用户UI,尽管你必须聪明地传递分数或其他任何东西,或者使用注册表类型的设置

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

首先,确保你有一个好的逻辑来启动一个级别,假设它是一个叫做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有一些很棒的素材可以玩(尽管他已经跳到了HTML5游戏)

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

相关内容

  • 没有找到相关文章

最新更新