- UID
- 3517
- 精华
- 积分
- 959
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
本帖最后由 Tao0Lu 于 2020-3-24 16:39 编辑
前言:一只蝙蝠
无聊之作
自从1.12之后 mc加入了这个mcfunction的东西,之后就被玩坏了...
这个其实就顺便做做玩吧,没有什么算法,也没有什么难度,也就是用vb的图像缩放图片然后寻找RGB值导入mcfunction文件。
再用下ffmpeg支持视频
1.12的mcfunction位于存档\data\functions下面
1.13之后mcfunction作为数据包位于\datapacks\随便的名字\data\不随便的名字(小写字母和数字和某些非特殊符号)\functions中
mcfunction文件的命名不能使用大写字母,特殊符号和中文。
1.13在第一个命名空间后的文件夹中(也即是data的上一目录需要存在一个pack.mcmeta文件对数据包进行声明和描述)
pack.mcmeta:
- {
- "pack": {
- "pack_format": 1,
- "description": "这里是描述数据包的字符串"
- }
- }
复制代码
wiki上说pack_format是指明游戏版本,但是实际上随便一个值就可以了
其中核心的就是这个了:
- For Z = 0 To picImage.ScaleHeight - 1
- CIPtr = (picImage.ScaleHeight - 1 - Z) * BmpWidth
- '复制一行源RGB
- CopyMemory Line24(0), ByVal Ptr24, BmpWidth * 3
- For X = 0 To picImage.ScaleWidth - 1
- If Line24(X).R = 0 Then WritePix.R = 0.001 Else WritePix.R = Round(Line24(X).R / 255, 3)
- If Line24(X).G = 0 Then WritePix.G = 0.001 Else WritePix.G = Round(Line24(X).G / 255, 3)
- If Line24(X).B = 0 Then WritePix.B = 0.001 Else WritePix.B = Round(Line24(X).B / 255, 3)
- If DirX.Value Then
- '浮点计算通病
- If Version1_13.Checked Then
- Print #1, "particle minecraft:dust " & WritePix.R & " " & WritePix.G & " " & WritePix.B & " 1 " & XOff & " " & Format(Round(0.1 + YOff + 0.2 * Z, 2), ".00") & " " & Format(Round(0.2 * X + 0.1 + ZOff, 2), ".00") & " ~ ~ ~ 1 0 force"
- Else
- Print #1, "particle reddust " & XOff & " " & Round(0.1 + YOff + 0.2 * Z, 1) & " " & Round(0.2 * X + 0.1 + ZOff, 1) & " " & WritePix.R & " " & WritePix.G & " " & WritePix.B & " 1 0 force"
- End If
- ElseIf DirY.Value Then
- If Version1_13.Checked Then
- Print #1, "particle minecraft:dust " & WritePix.R & " " & WritePix.G & " " & WritePix.B & " 1 " & Format(Round(0.1 + XOff - 0.2 * X, 2), ".00") & " " & YOff & " " & Format(Round(0.2 * Z + 0.1 + ZOff, 2), ".00") & " ~ ~ ~ 1 0 force"
- Else
- Print #1, "particle reddust " & Round(0.1 + XOff - 0.2 * X, 1) & " " & YOff & " " & Round(0.2 * Z + 0.1 + ZOff, 1) & " " & WritePix.R & " " & WritePix.G & " " & WritePix.B & " 1 0 force"
- End If
- ElseIf DirZ.Value Then
- If Version1_13.Checked Then
- Print #1, "particle minecraft:dust " & WritePix.R & " " & WritePix.G & " " & WritePix.B & " 1 " & Format(Round(0.2 * X + 0.1 + XOff, 2), ".00") & " " & Format(Round(0.1 + YOff + 0.2 * Z, 2), ".00") & " " & ZOff & " ~ ~ ~ 1 0 force"
- Else
- Print #1, "particle reddust " & Round(0.2 * X + 0.1 + XOff, 1) & " " & Round(0.1 + YOff + 0.2 * Z, 1) & " " & ZOff & " " & WritePix.R & " " & WritePix.G & " " & WritePix.B & " 1 0 force"
- End If
- End If
- Next
- '....
- Next
复制代码
particle命令:
1.9-1.12:particle 粒子名称 x y z xd yd zd 速度 数量 模式
当粒子名称为reddust,mobSpell,mobSpellAmbient时候, xd yd zd会变成浮点型的RGB值(RGB除以255,范围0-1)
这个浮点型的RGB有点坑的,RGB为0时不能直接用0来写,我这里用0.001来敷衍一下吧
1.13及以后:particle 粒子名称(R G B) x y z xd yd zd 速度 数量 模式
当粒子名称为dust,mobSpell,mobSpellAmbient时候, 粒子名称后会多出浮点型的RGB值(RGB除以255,范围0-1)
模式force指很远的地方也能看到
这里更神奇的是,如果你将数量不设置为0,那么这个粒子的生成位置会随机的偏移,而且偏移的位置非常大(有时候都有差不多2格方块了)。
1.13之后,xyz轴为强制的两位小数的浮点型,没错,如果只有1位小数它就不给你生成。
浮点计算过多会不精准,比如2.0+1.0有可能会变成2.999994或者3.000002,这里我就用round继续敷衍一下吧。
视频转换我这里就不演示了
开始迫害
下载:
https://www.lanzous.com/ia992ni (带了ffmpeg.exe)
ParticlesArt.zip
(60.17 KB, 下载次数: 15)
要支持视频转换记得下载ffmpeg.exe到同一目录哦
|
|