2d Platformer中的“时间控制”


9

我正在制作一个2D平台游戏,玩家可以按下按钮并重新启动关卡,只有他们以前的角色也可以同时运行关卡,就像他们回到过去一样。

我知道其他游戏以前也这样做过,而我想到的方法是使游戏角色具有一系列动作(空闲,跳跃,向左走等),然后检测这些动作的变化并将其登录列表以及游戏时间。因此,当我需要角色自己再次运行关卡时,我可以浏览列表以在适当的时候更改其动作。

这是最好的方法吗?有人在这方面有经验吗?

谢谢。


您正在寻找的不是时间控制,而是更多的“重放”。您可能会找到一些有关解决此问题的不错的文章,但是我仍然说,下面的答案也是这方面的一个好的开始。请记住,如果游戏中“随机”的事情会影响进度,则它们会破坏重新运行“幽灵”角色的重播。
詹姆斯

3
关于“随机”部分的要点。确保使用随机生成器根据种子生成其数字。然后将种子与重播一起保存,并在播放该重播时使用相同的种子。
bummzack 2011年

你是怎么做的?您的解决方法是什么?

Answers:


8

编辑:

请参阅@Bluescrn对这个问题的回答;他详细介绍了重播控件的弱点,而不是运动矢量或位置。

-

您走在正确的轨道上。这是我要使用的方法:

控制器

创建一个Controller类,该类接收键盘输入并将其传递给您的角色。但是,也要有一个Controller记录,以准确记录何时按下有效键(例如箭头,跳转等)以及释放它们的时间。它将存储以下信息:

actions[0].milliseconds = 400     actions[0].action = right pressed
actions[1].milliseconds = 1000    actions[1].action = jump pressed
actions[2].milliseconds = 1300    actions[2].action = jump released
actions[3].milliseconds = 2500    actions[3].action = jump pressed
actions[4].milliseconds = 3000    actions[4].action = jump released
actions[5].milliseconds = 5330    actions[5].action = right released

控制器有两种模式:

  1. 记录:接收键盘输入。在列表中记录输入。根据键盘状态处理字符输入。
  2. 重播:忽略键盘输入。根据自级别开始以来经过的毫秒数,在列表中前进。根据当前记录的键盘状态来处理字符输入。

性格

构造您的Character对象时,它将为自己创建一个新的Controller。角色可以随时处于以下两种模式之一:

  1. 活动的:只有一个活动角色,它是您控制的角色。当角色处于活动模式时,其控制器处于记录模式。默认情况下,构造角色时,它处于活动模式。
  2. 幽灵:这是重播您过去的动作的人。当角色进入幽灵模式时,它将更改其外观并将其控制器设置为重播模式。

等级

重新开始的水平

启动关卡时,创建一个角色。现在,关卡开始,玩家开始做他的事情。

时间重置时

重置级别后,请执行以下三件事:

  1. 告诉当前的活动角色进入幽灵模式。
  2. 创建一个新角色。
  3. 召唤所有角色重置自己。这会将它们放回到起始位置,不动,以此类推。然后,它们将告诉其控制器在不按任何键的情况下重置为毫秒0。

然后关卡开始,玩家开始做他的事情。


这很清楚。非常感谢。我有一个正确的想法,但是我打算建立一个中央系统来记录运动,但是让每个角色记录自己的运动是一种更简单的方法。谢谢。
伍迪·赞辛格

8

如果要重放记录的输入,请考虑世界上任何移动/可破坏/交互式对象的含义,这些对象在重放操作时可能已经移动或更改了状态

另外,如果您的游戏使用可变的时间步长,则重放输入将无法精确工作。您可能要考虑定期更新游戏(使用插值法进行可变帧率渲染)?


1
如果可以的话,+ 10。伟大的考虑。重播运动矢量或位置将优于重播输入,具体取决于所需的效果。与输入相比,在处理移动和位置时,可能更容易解决帧之间数十毫秒的误差。
doppelgreener 2011年


0

在您的情况下,记录键盘输入可能没有用。但是,您可以生成带有时间轴的样条线。如果您需要运用一些技巧,甚至可以倒带时间

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.