本帖最后由 chyx 于 2018-11-4 14:27 编辑
使用1.14的延迟指令(schedule)做的音乐。
这个指令简直天生就是为了音乐做的。
因为不能传递任何指令上下文,也不能重复执行同一个指令,所以做系统时很鸡肋。
但做音乐就很舒服了。
我注意到这个指令再level.dat文件里做的标记的格式,照着做,把把乐谱转成音符和游戏刻对应的形式写入文件,即可在指定的游戏刻播放音乐。
进入游戏什么都不用做。
我还发现 只有schedule自己限制了不能有重复的,但其实真写进去完全没有问题。
先建立一些函数 每个里面就一个playsound不提
我稍微写了点代码:
复制代码把乐谱写进去。里面可以改每个音符多少游戏刻 进入游戏多久开始播。
效果:https://vc.bilibili.com/video/1912714
注 使用了@Soma-Komeiji的资源包。自己转成了1.14版本
使用1.14的延迟指令(schedule)做的音乐。
这个指令简直天生就是为了音乐做的。
因为不能传递任何指令上下文,也不能重复执行同一个指令,所以做系统时很鸡肋。
但做音乐就很舒服了。
我注意到这个指令再level.dat文件里做的标记的格式,照着做,把把乐谱转成音符和游戏刻对应的形式写入文件,即可在指定的游戏刻播放音乐。
进入游戏什么都不用做。
我还发现 只有schedule自己限制了不能有重复的,但其实真写进去完全没有问题。
先建立一些函数 每个里面就一个playsound不提
我稍微写了点代码:
- import nbtlib
- from nbtlib.tag import *
- import re
- x=nbtlib.load("level.dat")
- p="5353531 24325 5353531 24321 2244315 24325 5353531 24321"
- p= re.findall("( |(?:\.+|-+)?\ds?)",p)
- def trig(name,function,time):
- return Compound({'Callback': Compound({'Type': String('minecraft:function'), 'Name': String(function)}), 'Name': String(name), 'TriggerTime': Long(time)})
- #
- x.root["Data"]["Time"]=Long(0)
- x.root["Data"]['ScheduledEvents']=List[Compound]()
- for i,j in enumerate(p):
- if j !=" ":
- x.root["Data"]['ScheduledEvents'].append(trig(f"{i}",f'chyx:{j}',4*i+200))
- x.save()
效果:https://vc.bilibili.com/video/1912714
注 使用了@Soma-Komeiji的资源包。自己转成了1.14版本
所以说1.13没有这个schedule
得靠记分板一个一个加变量
然后playsound还得联动function疯狂@e[...]awa
得靠记分板一个一个加变量
然后playsound还得联动function疯狂@e[...]awa
看来1.14以后的音乐地图会多很多~~
Abraham511 发表于 2018-11-4 15:28
看来1.14以后的音乐地图会多很多~~
因该可能会配合1.13的tp-rotation做出音乐风景欣赏的地图awa
本帖最后由 贰逼 于 2018-11-4 21:50 编辑
这个schedule的延迟是按刻计时的吗
我现在正在向A2M添加基于scoreboard的数据包音乐生成功能,如果这个schedule也是按刻即时,那我也可以基于它来制作了
它目前看起来是这样的:
https://www.bilibili.com/html/player.html?aid=34814375&wmode=transparent&as_wide=1&page=1
这个schedule的延迟是按刻计时的吗
我现在正在向A2M添加基于scoreboard的数据包音乐生成功能,如果这个schedule也是按刻即时,那我也可以基于它来制作了
它目前看起来是这样的:
https://www.bilibili.com/html/player.html?aid=34814375&wmode=transparent&as_wide=1&page=1
本帖最后由 chyx 于 2018-11-4 22:33 编辑
是按游戏刻计时的。
不过和方块刻不同 他在存档里记录的是执行时的总时间
就是time query gametime的那个
=============
这个的好处就是不用搞一个记分板 并且检查分数来做了。
贰逼 发表于 2018-11-4 21:49
这个schedule的延迟是按刻计时的吗
我现在正在向A2M添加基于scoreboard的数据包音乐生成功能,如果这个sche ...
是按游戏刻计时的。
不过和方块刻不同 他在存档里记录的是执行时的总时间
就是time query gametime的那个
=============
这个的好处就是不用搞一个记分板 并且检查分数来做了。
66666666666
最后还是用计分板作为datapack音乐的timer,软件已经实装了该功能:
http://www.mcbbs.net/thread-799862-1-1.html
测试过感觉schedule操作起来不太方便,毕竟要遍历每个乐器的每个音符
虽然用的是计分板,但一个乐曲独立一个计分板独立一个命名空间,就没什么问题
而且计分板还能做到暂停和快进,随时重置,比schedule更实际一点
http://www.mcbbs.net/thread-799862-1-1.html
测试过感觉schedule操作起来不太方便,毕竟要遍历每个乐器的每个音符
虽然用的是计分板,但一个乐曲独立一个计分板独立一个命名空间,就没什么问题
而且计分板还能做到暂停和快进,随时重置,比schedule更实际一点
流批,兄弟