【个人独立游戏】音乐点击类游戏同步问题

个人的独立游戏
实现了类似 【QQ炫舞】 那样的 跟随音乐节奏点击 的一个玩法
记录好音乐节奏点 用jason 读取
用update判断一个全局时间变量 到时间了 根据json文件来触发点击
现在的问题是 开始几个节奏点是准的 后面就都不准了

实际上 判断时间点 和 音乐播放 是2条互不影响的线 只是我同时触发了 理论上 时间应该是对应的上的 但是感觉 一旦有一些掉帧或卡顿 就会影响这2条线的同步 有什么好的处理方法吗

另外问一下 动画时间轴上可以插入触发事件 那音频上可以这样处理吗

1赞

帮顶下

感谢~

帮顶,帮顶

帮顶。

帮顶,对这个问题很感兴趣

通过update(dt){time += dt;}得到的时间,对比通过new Date().getTime()计算的时间差是极小的.
实验了下大概经过一分钟左右也就0.001秒左右的误差。
就一首歌的时间来说,完全不可能看出有一丁点影响.
其实应该不用考虑到掉帧的影响,无论是时间计算是否有误差,还是音频本身是否会因为掉帧延迟。
直接在update中判断,这个音频当前播放的时间位置就好了,达到或刚超过预设的时间点,就触发事件。
前提是如果我没理解错的话。

帮顶~~

1.计时器用js自带的setInterval
2.解决卡顿问题

感谢大家的支持
那我现在先解决卡顿的问题 看是不是完全由这个问题引起的不同步 初步的想法是先把所有实例化的元素放进对象池预加载 有什么进展或问题 再来请教大家

不要用setInterval,安卓和苹果上速度不一样你敢信?
update并不是每帧都执行的,会因为手机卡住,卡住就会产生延迟,update里的时间是不准的,最好还是用new Date().getTime()来补差

你的表达不正确吧,update从逻辑上来说肯定要执行的呀,通过update中的每帧的时间参数来计算,应该是没有多少误差的,我试过相比new Date().getTime()几个分钟也才千分之几秒的误差

我也对音乐节奏类游戏感兴趣,我自己记录的节奏点到json文件,用creator播放 也是update累加dt,3分钟的音乐从头播放到尾没发现节奏点偏差较大。不要用chrome预览,浏览器要点击操作后才会开始播放音乐。

不同步和能不能通过对象池快速加载没有多大关系吧,最多是影响帧率,但是无论怎么优化并不能保证在每台设备上一定保持最好的帧速率,所以关键还是在于你说的同步。
我看音频是有直接获取播放进度的api,这个就等于音频本身已经给你记录时间了,所以你可以update中对这个时间数据进行操作,就不会出问题的。

所以关键是在于两个时间,是用不同的方式进行的,所以不能保证彼此同步。
比如说音频自身本身会记录一个时间,那么第二个时间直接使用音频本身的时间,从逻辑上来说就是完全同步的。
或者反过来说,你用自己的方法记录一个时间,然后让音频播放的时间根据自己记录的时间不断调整播放,但是这样一来音频播放可能会有点点问题。所以只能选用前者

问下楼主,你用什么方法获取的音乐节奏呢,用辅助工具自己打call,还是自动音频识别。

我现在在做的音游是用json文件来设置音乐节奏,读取节奏点什么的直接读取json文件就行

我的json文件是用关卡编辑器来生成的。或者自己手动填也行,只不过手动填麻烦一点

好的 了解

音乐节奏点 是手动记录的 你想要体验好 哪里设置点击 哪里长按 需要根据音乐节奏反复调整的