libGDX:在没有Scene2D的情况下在两个屏幕之间淡入和淡出

时间:2017-09-11 19:38:23

标签: layout libgdx fadein transitions

它再次成为我:)

我目前正试图让我的libGDX游戏完成。但是,我一直坚持使用两个屏幕的过渡,所以我想要这样,例如当我开始游戏并淡入游戏屏幕时,淡出菜单屏幕。我没有使用Scene2D,也不熟悉舞台和演员。如果有人能帮助我并解决问题,我会很高兴。

提前致谢! :)

2 个答案:

答案 0 :(得分:1)

不用担心,您可以在不使用Scene2D的情况下实现目标。无论如何,构建积木系统的工作稍微多一些,但最后还是值得的。

概念

概念是拥有游戏屏幕管理器,它将管理您将在游戏中运行的游戏屏幕。这是说的。当您从一个屏幕转换到另一个屏幕时,您需要这样的游戏屏幕管理器来控制哪个游戏屏幕能够draw,哪个能够update。< / p>

  

通常你会有这样的经理管理你的游戏画面。但我们可以进一步利用它来实现屏幕过渡效果。

当过渡效应开始时,这种控制能力将发挥重要作用。 对于淡入/淡出效果,我们假设您将T定义为当一个屏幕转换为另一个屏幕时完成的总时间,A是开始屏幕,B是目标屏幕,而M游戏屏幕管理员,背后的逻辑将如下

  • 淡出A直到T/2的总时间过去,然后您开始淡入B。在此操作开始时,M仅允许A update()自己的游戏逻辑,但同时允许ABdraw()到后面的缓冲屏幕上。因此A可以更新自己的逻辑代码,但两个屏幕都可以绘制。
  • T/2的另一个持续时间过去(现在总共为T)时,您允许B能够update()。这意味着游戏逻辑开始在B内进行,A将被处理,因为我们不再需要了。

如何在转换过程中同时为AB绘制内容

您可能会质疑我们如何以alpha方式绘制整个内容。我们应该搞乱自定义着色器编程吗?没必要。我们仍然使用SpriteBatch

这样做的方法是首先通常绘制这种游戏画面的内容,然后我们绘制一个大小为2x2像素的黑色纹理(不需要像屏幕分辨率那样大),顶部有alpha。

这种alpha值将通过我们在过渡效应中使用的机制动态计算。使用此技术,首先从AB绘制内容,然后在屏幕上方使用Alpha值绘制黑色纹理,以实现淡入/淡出过渡效果。

有关技术细节的更多信息

按照以下步骤的指导来实现我上面描述的内容。我不打算详细说明。但是这些步骤可能会让您了解实施并不困难。

  • 实施游戏画面管理器来控制游戏状态,在游戏画面之间切换而不会产生任何过渡效果
  • 实施TransitionState课程。这个类最少接受两个参数,即开始游戏画面和目标游戏画面(其他是衰落的持续时间,过渡效果类型等),以执行逻辑,如上面 Concept 中所述。如何绘制...... 部分。简而言之,这个类只是游戏的另一个游戏屏幕(或说游戏状态),但是当你需要从一个游戏屏幕转换到另一个屏幕时,它将同时管理两个游戏屏幕。您可以进一步扩展此想法,以包含更多类型的过渡效果。因此,TransitionState类将为您构建一个屏幕转换块。您可以在Youtube上查看ForeignGuyMike的OMO教程。你可以从头开始创建与他类似的代码库,或者看一下他开始在这个类上编码的确切episode starting at 31:08。他还在剧集中有一个代码完成的项目文件,所以你可以看看他是如何实现的。
  • 每当您需要从当前屏幕转换到另一个屏幕时,您需要创建TransitionState的新实例,然后使用开始和目标游戏屏幕为它们提供信息。这是告诉游戏切换屏幕的方法。在幕后,需要时间淡出,然后处置旧的游戏画面(淡出),然后完全切换到目标游戏画面。继续正常。

这就是全部。请不要害怕我在这里输入的冗长文本,就像你得到核心概念一样,你可以继续自己实现,但你需要了解libgdx的基本构建块才能使用它。 / p>

祝你好好实施。

答案 1 :(得分:0)