gpt4 book ai didi

c++ - 回滚数据的最有效方法。时光倒流

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:42 25 4
gpt4 key购买 nike

所以,我有一个 3d 平台游戏。我想要一个按钮,如果你按住它,它会让你“回到过去”。值得庆幸的是,这款游戏相当简单,只有一个实体,因此每一帧唯一需要保存的是。

struct Coord {
float x;
float y;
float z;
}

structure Bool6 {
bool front;
bool back;
bool left;
bool right;
bool top;
bool bottom;
}

struct Player {
Coord Pos;
Coord Vel;
Bool6 Col;
}

但我担心这是大量数据,尤其是因为我的游戏理论上运行速度约为 60fps,最好保存 5 秒左右(300 帧)的数据,以便在回滚时访问。我考虑过每一帧都做这样的事情

Player Data[300];

for (int i = 299; i > 0; i--)
{
Data[i] = Data[(i-1)];
}
Data[0] = "THIS FRAMES DATA";

然而,这听起来似乎意味着仅存储每一帧就需要大量的处理能力。

它们是否是一种更有效的存储此数据的方式,使所有数据保持有序?

这也是我可以告诉数组槽它什么都没有的方法吗?因此,如果玩家在所有阵列槽都被填满之前或回滚之后尝试回滚,他们就不会出现问题吗?我相信在 C# 中我会将其设置为 NULL...但这在 C++ 中不起作用可能是因为我使用的是结构。

非常感谢!

最佳答案

However that sounds like it means an outrageous amount of processing power

在做出这样的声明之前,先算一下会有用。看来您关心的数据大约是 40 个字节,所以 40*300 = 12 kB。这可以很容易地装入内存中,远非现代计算机上“惊人的处理能力”。

Is their a more efficient way to store this data keeping all of the data in order?

是的。如果您的游戏是确定性的,那么您只需存储玩家的输入和 5 秒前的一个游戏状态。回滚时,重置游戏状态并重播用户输入以重新计算每一帧数据。

参见 this question有关如何在 gamedev stackexchange 上设计您自己的重播系统的有趣讨论。

关于c++ - 回滚数据的最有效方法。时光倒流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com