Tao0Lu 发表于 2020-3-1 21:28:13

【VB6】Minecraft粒子画

本帖最后由 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)

要支持视频转换记得下载ffmpeg.exe到同一目录哦

Ayala 发表于 2020-3-4 18:28:28

又见技术玩家。

0xAA55 发表于 2020-3-5 19:24:24

开始迫害还行

smitest 发表于 2020-3-5 19:32:10

到底做啥的啊

Tao0Lu 发表于 2020-3-6 12:26:02

smitest 发表于 2020-3-5 19:32
到底做啥的啊

MC中有一个名为particle的特效(不是实体,无法Kill),particle可以设置RGB值。根据这个把图片或视频在MC中用每一个particle代表一个像素来显示出来。

德小SHUO 发表于 2020-3-8 12:29:05

楼主的图片查IP是怎么弄的

Tao0Lu 发表于 2020-3-8 15:18:48

德小SHUO 发表于 2020-3-8 12:29
楼主的图片查IP是怎么弄的

Discuz的img在个性签名中引用图片地址就行了,就是一个地址,每次访问立即会生成一个图片。网站在图片中哦。

Ayala 发表于 2020-3-8 18:14:06

德小SHUO 发表于 2020-3-8 12:29
楼主的图片查IP是怎么弄的

https://ip.ntrqq.net
生成在线个性签名,在引用就可以了

Cer 发表于 2020-3-24 12:21:11

不错哦。
页: [1]
查看完整版本: 【VB6】Minecraft粒子画