我想知道游戏中的时间操纵机制通常是如何设计的。我对时间倒计时特别感兴趣(类似于最新的SSX或波斯王子)。
该游戏是2D自上而下的射击游戏。
我尝试设计/实现的机制具有以下要求:
1)除玩家角色外,实体的动作是完全确定的。
- 实体采取的行动基于自关卡开始以来所取得的帧数和/或玩家在屏幕上的位置
- 在关卡中的设定时间产生实体。
2)时间倒转通过实时倒转来实现。
- 玩家的动作也被反转,它以相反的方式重放玩家的行为。播放器在反转时间内无法控制。
- 反转所花费的时间没有限制,如果需要,我们可以一直反转到关卡的开始。
举个例子:
框架0-50:玩家在此期间向前移动20个单位敌人1在框架20处产生。敌人1在框架30-40期间向左移动10个单位玩家在框架45发射子弹子弹向前移动5个(45-50),并杀死敌人1框架50
反向将实时回放:玩家在此期间向后移动20个单位,敌人1在第50帧复活。子弹在第50帧再次出现。子弹向后移动5并消失(50-45)敌人向左移动10(40-30)敌人在框架20。
只是看着运动,我对如何实现这一点有一些想法,我想到了一个界面,该界面可以在时间前进或后退时改变行为。而不是这样做:
void update()
{
movement += new Vector(0,5);
}
我会做这样的事情:
public interface movement()
{
public void move(Vector v, Entity e);
}
public class advance() implements movement
{
public void move(Vector v, Entity e)
{
e.location += v;
}
}
public class reverse() implements movement
{
public void move(Vector v, Entity e)
{
e.location -= v;
}
}
public void update()
{
moveLogic.move(new vector(5,0));
}
但是我意识到这并不是最佳的性能,并且对于更高级的动作(例如沿弯曲路径的平滑移动等)会很快变得复杂。