“循环播放”BGM

超级大前提:你的BGM有“不进入循环的前奏部分”“可形成曲内循环的部分”。参考方向就是几乎所有游戏的BGM。

如果你不懂,那就多玩点游戏。


先直接上格式,然后再讲解细节原理——

[statedef -3]


[state 前奏部分]

trigger1 = (只执行一次的条件,倒不是说真的只能执行一次,是根据下方的循环部分来说的那唯一一次,例如roundstate = 0)

type = playsnd

value = xxxx

channel = 6

lowpriority = 1    ;确保连续执行时不会多次覆盖


[state 循环部分]

trigger1 = 1    ;←因为程序设计的执行顺序,先执行上方的playsnd,所以此处的会后执行,但我们无须在这里的trigger担心覆盖问题,所以完全可以直接写1常时执行

type = playsnd

value = yyyy

channel = 6    ;与上方的channel必须一致,否则lowpriority没有意义

lowpriority = 1    ;必定要写

loop = 1    ;同上必定要写


原理:

因为执行顺序的关系,先执行摆放在最上方的前奏部分,而lowpriority与同一channel这两个条件会阻止它自身与下方的循环部分挤占了当前频道播放的音频,结果就是这段音频会被强制播完才能继续播放其余音频。

接着前奏部分“只执行一次”的条件的缘故,所以在播放完毕这段前奏部分之前,我猜大部分情况下都不会再执行前奏的trigger了,于是等channel = 6的前奏播放完毕以后,前奏部分不再执行,紧接着早就在常时执行并且lowpriority = 1的循环部分就会立即接着在channel = 6播放循环部分的音频。

最后,搞定,我自己试过的。

恋恋 评论于

牛批克拉斯

根据相关规定,发布评论前必须绑定手机前往绑定
你,确定要这么做吗?
正在处理中...