技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 406|回复: 8
收起左侧

【VB6】Minecraft粒子画

[复制链接]

11

主题

46

帖子

769

积分

用户组: 大·技术宅

UID
3517
精华
0
威望
20 点
宅币
665 个
贡献
18 次
宅之契约
0 份
在线时间
177 小时
注册时间
2018-3-2
发表于 2020-3-1 21:28:13 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 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:
[Java] 纯文本查看 复制代码
{
   "pack": {
      "pack_format": 1,
      "description": "这里是描述数据包的字符串"
      }
}

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


其中核心的就是这个了:
[Visual Basic] 纯文本查看 复制代码
 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继续敷衍一下吧。



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

QQ截图20200301205821.png

下载:
https://www.lanzous.com/ia992ni (带了ffmpeg.exe)
ParticlesArt.zip (60.17 KB, 下载次数: 6)
回复

使用道具 举报

28

主题

185

帖子

2102

积分

用户组: 版主

UID
1821
精华
6
威望
67 点
宅币
1632 个
贡献
121 次
宅之契约
0 份
在线时间
349 小时
注册时间
2016-7-12
发表于 2020-3-4 18:28:28 | 显示全部楼层
又见技术玩家。

1062

主题

2455

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
358 点
宅币
19617 个
贡献
40586 次
宅之契约
0 份
在线时间
1856 小时
注册时间
2014-1-26
发表于 2020-3-5 19:24:24 | 显示全部楼层
开始迫害还行

1

主题

17

帖子

117

积分

用户组: 小·技术宅

UID
5585
精华
0
威望
6 点
宅币
88 个
贡献
0 次
宅之契约
0 份
在线时间
11 小时
注册时间
2020-2-5
发表于 2020-3-5 19:32:10 | 显示全部楼层
到底做啥的啊

11

主题

46

帖子

769

积分

用户组: 大·技术宅

UID
3517
精华
0
威望
20 点
宅币
665 个
贡献
18 次
宅之契约
0 份
在线时间
177 小时
注册时间
2018-3-2
 楼主| 发表于 2020-3-6 12:26:02 | 显示全部楼层

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

3

主题

29

帖子

228

积分

用户组: 中·技术宅

UID
5449
精华
0
威望
6 点
宅币
187 个
贡献
0 次
宅之契约
0 份
在线时间
34 小时
注册时间
2019-12-13
发表于 2020-3-8 12:29:05 | 显示全部楼层
楼主的图片查IP是怎么弄的

11

主题

46

帖子

769

积分

用户组: 大·技术宅

UID
3517
精华
0
威望
20 点
宅币
665 个
贡献
18 次
宅之契约
0 份
在线时间
177 小时
注册时间
2018-3-2
 楼主| 发表于 2020-3-8 15:18:48 | 显示全部楼层
德小SHUO 发表于 2020-3-8 12:29
楼主的图片查IP是怎么弄的

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

28

主题

185

帖子

2102

积分

用户组: 版主

UID
1821
精华
6
威望
67 点
宅币
1632 个
贡献
121 次
宅之契约
0 份
在线时间
349 小时
注册时间
2016-7-12
发表于 2020-3-8 18:14:06 | 显示全部楼层
德小SHUO 发表于 2020-3-8 12:29
楼主的图片查IP是怎么弄的

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

1

主题

33

帖子

123

积分

用户组: 小·技术宅

UID
5683
精华
0
威望
6 点
宅币
78 个
贡献
0 次
宅之契约
0 份
在线时间
6 小时
注册时间
2020-3-9
发表于 2020-3-24 12:21:11 | 显示全部楼层
不错哦。
回复

使用道具 举报

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图  

GMT+8, 2020-8-12 06:12 , Processed in 0.108860 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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