KwaiAppTeam / AkDanmaku

一款利用游戏引擎理念打造的原生弹幕库
Other
461 stars 35 forks source link

seekTo方法会导致开始播放弹幕 #8

Open SkyD666 opened 2 years ago

SkyD666 commented 2 years ago

fun seekTo(positionMs: Long)方法会导致开始播放弹幕,无论此时是否暂停。 例如在例子程序中,开始播放,然后暂停,然后滑动进度条,此时左下角在暂停状态,但是弹幕开始播放了

xanahopper commented 2 years ago

根据我们的实践,一般推荐将播放器的状态同步给弹幕 Player,即当播放器播放时播放,播放器暂停时暂停。

SkyD666 commented 2 years ago

但是弹幕Player暂停后(也就是调用了pause后),再调用seekTo会导致弹幕Player开始播放。我感觉一般来说seekTo后应该保持之前的原状(之前是播放,之后也是播放;之前是暂停,之后也是暂停)

SkyD666 commented 2 years ago

我发现个解决方案 首先,为DanmakuTimer类增加fun seekTo(positionMs: Long)方法,专门用来seek,并将DanmakuEngine类的seekTo方法内调用timer.start(positionMs)改为调用timer.seekTo(positionMs);

=======若不加下面的部分,则在暂停时,seek一下,新位置的弹幕不会立即显示出来,需要播放后才能显示;若加了下面的部分,则seek后新位置的弹幕会立即显示=======

然后为DanmakuTimer类增加一个Boolean类型的waitToSeek变量,用来标识是否有seek动作; 然后再LayoutSystem类的update方法内,将最后一个if (isPaused) {......判断改为如下所示(这个就是让seekTo后不管是否isPaused,都刷新一次弹幕位置,以便弹幕能够立即显示出来) if (isPaused && !timer.waitToSeek) { if (needSync) { cacheManager.requestBuildSign() } else { config.updateRender() layoutGeneration = config.layoutGeneration } } else if (timer.waitToSeek) { timer.waitToSeek = false }

如果方案可以,我去提个pr?