找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2998|回复: 8

【VB6】Minecraft粒子画

[复制链接]
发表于 2020-3-1 21:28:13 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 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:
  1. {
  2.    "pack": {
  3.       "pack_format": 1,
  4.       "description": "这里是描述数据包的字符串"
  5.       }
  6. }
复制代码

wiki上说pack_format是指明游戏版本,但是实际上随便一个值就可以了


其中核心的就是这个了:
  1. For Z = 0 To picImage.ScaleHeight - 1
  2.         CIPtr = (picImage.ScaleHeight - 1 - Z) * BmpWidth
  3.         '复制一行源RGB
  4.         CopyMemory Line24(0), ByVal Ptr24, BmpWidth * 3
  5.             For X = 0 To picImage.ScaleWidth - 1
  6.             If Line24(X).R = 0 Then WritePix.R = 0.001 Else WritePix.R = Round(Line24(X).R / 255, 3)
  7.             If Line24(X).G = 0 Then WritePix.G = 0.001 Else WritePix.G = Round(Line24(X).G / 255, 3)
  8.             If Line24(X).B = 0 Then WritePix.B = 0.001 Else WritePix.B = Round(Line24(X).B / 255, 3)
  9.             If DirX.Value Then
  10.             '浮点计算通病
  11.                 If Version1_13.Checked Then
  12.                 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"
  13.                 Else
  14.                 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"
  15.                 End If
  16.             ElseIf DirY.Value Then
  17.                 If Version1_13.Checked Then
  18.                     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"
  19.                 Else
  20.                     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"
  21.                 End If
  22.             ElseIf DirZ.Value Then
  23.                 If Version1_13.Checked Then
  24.                     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"
  25.                 Else
  26.                     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"
  27.                 End If
  28.             End If
  29.             Next
  30.         '....
  31.     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继续敷衍一下吧。



视频转换我这里就不演示了
开始迫害

QQ截图20200301205821.png

下载:
https://www.lanzous.com/ia992ni (带了ffmpeg.exe)
ParticlesArt.zip (60.17 KB, 下载次数: 15)
要支持视频转换记得下载ffmpeg.exe到同一目录哦

回复

使用道具 举报

发表于 2020-3-4 18:28:28 | 显示全部楼层
又见技术玩家。
回复 赞! 靠!

使用道具 举报

发表于 2020-3-5 19:24:24 | 显示全部楼层
开始迫害还行
回复 赞! 靠!

使用道具 举报

发表于 2020-3-5 19:32:10 | 显示全部楼层
到底做啥的啊
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2020-3-6 12:26:02 | 显示全部楼层

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

使用道具 举报

发表于 2020-3-8 12:29:05 | 显示全部楼层
楼主的图片查IP是怎么弄的
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2020-3-8 15:18:48 | 显示全部楼层
德小SHUO 发表于 2020-3-8 12:29
楼主的图片查IP是怎么弄的

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

使用道具 举报

发表于 2020-3-8 18:14:06 | 显示全部楼层
德小SHUO 发表于 2020-3-8 12:29
楼主的图片查IP是怎么弄的

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

使用道具 举报

发表于 2020-3-24 12:21:11 | 显示全部楼层
不错哦。
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 20:24 , Processed in 0.038877 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表