最近项目有一个回放的需求,用户在完成一个关卡之后,可以回放观看。
由于游戏中用户操作相对简单,我用数组记录了用户的每个操作,和该操作时update下dt的累加值。
当用户回放的时候,在update里逐条比对dt的累加值,如果与数组中相应值相同。则用代码触发用户操作。
但由于update里的dt是不均匀的,所以出现了很大误差。。
不知道有什么办法能使dt的值固定。。。或者有其他更好的办法?
最近项目有一个回放的需求,用户在完成一个关卡之后,可以回放观看。
由于游戏中用户操作相对简单,我用数组记录了用户的每个操作,和该操作时update下dt的累加值。
当用户回放的时候,在update里逐条比对dt的累加值,如果与数组中相应值相同。则用代码触发用户操作。
但由于update里的dt是不均匀的,所以出现了很大误差。。
不知道有什么办法能使dt的值固定。。。或者有其他更好的办法?
mark
大佬们去哪儿了
fixupdate?
感谢大佬回复。。我翻了一下cocoscreator的文档好像没有fixedupdate。Unity里倒是有
为啥要用update呢,用action或是延迟函数多简单,间隔时间n回调执行数组里的操作,直到数组的最后
这个方法试了,误差也不可控啊。。
我看了一下,即使同一部手机,每次进入场景渲染的速度都会有偏差。
而settimeout是不会受渲染效率影响的,所以就出现误差
额,别用update啊 ,然后dt这个也不行肯定会有变动的。就当做一个播放器,播放你记录的操作帧吧。比如3s的时候 是什么,然后3.5s 又是什么。这种,用固定的方式来
这样一来回放的效果就大打折扣了
如果只记录几个关键帧,好像就没有回放的必要和对用户的吸引力,变成鸡肋了
请问你知道fixedupdate在cocoscreator里有类似的方法吗?
可能你没理解我的意思。。你自己体会下吧
mark一下 说不定以后会用到
我有一个想法
在一个统一的update里计数,从0开始++
玩家做一次点击操作,比如在某点上放技能,不立刻执行,而是在下一帧的update里执行,并记录当前计数
这样子的话用dt有可能会错位吧,不过不用dt也没关系吧
不是很懂你需求,不过fixedupdate 这个你可以试试自己用update封装,例如你设置的时间是 time。
那代码大概就是
this.t = 0;
update(dt){
this.t += dt;
let n = Math.floor(this.t / time);
fun(n); // 执行n次fixedupdate
this.t -= (n * time)
}
你是说用给每个update调用编个号,在update里触发用户行为。
这样也会有误差,既然dt是不固定的,update的调用次数也是会有区别的。
帧率设定为60,实际帧率可能会在59~61浮动,所以update调用次数也不是固定的!
这个方法我试试看。。谢谢
操作和回放,都不需要update,关卡开始记个时间戳,用户每次操作记个时间戳
时间戳都有了,还纠结用update
已经知道维纳斯的身高了,还要列个公式算步骤
简单场景可以用你这种方法,事实上我现在就是用的这种方法,但误差难控。
请虚心看一下帖子,不要仅仅看到维拉斯的身高,她可能还是个傻子
目前dt是存在这样的问题,我觉得可以:
给组件加一个oldDt属性,
然后在update中写对比逻辑,只要保证oldDt小于dt就行。
当dt大于oldDt,那么dt = oldDt;
这样能保证dt固定是最小那个值。