gpt4 book ai didi

c++ - 具有 FPS 校正功能的 cocos2d 回放系统

转载 作者:行者123 更新时间:2023-11-28 07:42:12 26 4
gpt4 key购买 nike

我正在为我的 cocos2d-x 游戏构建一个回放系统,它也使用 box2d。

游戏是不确定的,所以我无法存储用户操作并重播它们,所以我正在做的是将每个时间步的 Sprite 的位置和角度存储到流中。

现在我有以下格式的重放文件

x,y,angle\r\n

每条线代表 Sprite 在给定时间步的状态。

现在当我在同一台设备上回放时,一切都很完美,但生活当然不是那么容易,所以如果我想以不同的帧率回放,问题就来了,这怎么会发生?

有没有聪明的方法来处理这个问题?

我也没有固定的时间步长,我会尽快实现这个,这样你就可以在你的答案中考虑一个固定的时间步长:)

谢谢!

最佳答案

好的,您记录了每个记录帧的增量时间。最好从增量时间为 0 的第一帧开始录制,并假设回放的第一帧也是如此。

然后在您的更新方法中累积当前增量时间:

-(void) update:(ccTime)delta
{
if (firstFrame)
{
totalTime = 0;
totalRecordedTime = 0;
firstFrame = NO;
}
else
{
totalTime += delta;
}

totalRecordedTime += [self getRecordedDeltaForFrameIndex:recordedFrameIndex];
if (totalTime > totalRecordedTime)
{
[self advanceRecordedFrameIndex];
}

// alternative:
id recordedFrameData = [self getRecordedFrameForDeltaTime:totalTime];
// apply recorded data ...
}

备选方案:创建一个方法,根据当前时间增量返回或“应用”记录的帧。选择记录的总增量时间等于或小于当前总增量时间的帧。

为了更快地搜索帧,请记住最近记录的帧的索引并从那里开始搜索(比较每个帧的增量时间),始终包括最近的帧。

有时这会多次显示相同的记录帧,或者它可能会跳过记录的帧 - 取决于实际设备帧率和记录期间的帧率。

关于c++ - 具有 FPS 校正功能的 cocos2d 回放系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15589371/

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