最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

《我的世界》【1.16.5】Java版實(shí)用粒子教程(六)

2023-08-28 20:01 作者:卡兒3058  | 我要投稿

第六節(jié)? 拓展?


一、 畫(huà)圓命令的改進(jìn)

一條指令畫(huà)圓:

execute at <圓心> as <圓周> facing entity @s feet rotated ~-4 ~ run tp @s ^ ^ ^5

#"rotated ~-4 ~"中,"4"為轉(zhuǎn)速,"tp @s ^ ^ ^5"中,"5"為半徑。

#不想理解的人直接套模板


指令解讀:大概就是讓圓周自己繞著圓心旋轉(zhuǎn),而不是圓心拖拽圓周。

指令用途:可以給一個(gè)圓心掛多個(gè)圓周,繪制多個(gè)不同方向不同轉(zhuǎn)速的同心圓

在前面的章節(jié)我們講過(guò)了,畫(huà)圓的命令只需要兩條:

execute as @e[name=1] at @s run tp @s ~ ~ ~ ~4 ~

execute at @e[name=1] run particle minecraft:end_rod ^ ^1 ^5 0 0 0 0 0 force

但是單次繪制出來(lái)的圓不夠完整。

我們使用的老方法是堆疊命令來(lái)讓它繪制完整圓,這是基巖版的思路。但是這樣就算堆疊四次,實(shí)際命令的計(jì)算量就是八條。Java版沒(méi)C++優(yōu)化那么好啊,不要盲目的堆疊命令。所以我們需要優(yōu)化。

思路:圓是任意角度都是中心對(duì)稱(chēng)的圖形,并且圓上的任意點(diǎn)到圓心的距離都是一樣的(這個(gè)距離叫半徑),所以我們可以直接從四個(gè)方向繪制這個(gè)圓,從盔甲架視線的四個(gè)水平方向來(lái)顯示粒子,由于單個(gè)end_rod粒子的存在時(shí)間較長(zhǎng),它們拖拽出的軌跡可以重疊,所以就能描出一個(gè)完整的圓。

在上面那些命令的基礎(chǔ)上,再加:

#從盔甲架視線后方顯示粒子

execute at @e[name=1] run particle minecraft:end_rod ^ ^1 ^-5 0 0 0 0 0 force

#從盔甲架視線左方顯示粒子

execute at @e[name=1] run particle minecraft:end_rod ^5 ^1 ^ 0 0 0 0 0 force

#從盔甲架視線右方顯示粒子

execute at @e[name=1] run particle minecraft:end_rod ^-5 ^1 ^ 0 0 0 0 0 force


二、 豎方向法陣的繪制

繪制思路講解。

前面的章節(jié)已經(jīng)講過(guò)了,我們這個(gè)方法是擺線法繪制,所以正星形的本質(zhì)就是由圓形扭曲而來(lái),所以我們要先畫(huà)出一個(gè)圓。

我們按照第三節(jié)的套路,先把圓tp到一定高度,比如距離地面10格,然后旋轉(zhuǎn)方向又y軸改成x軸。

execute as @e[name=k1] at @s run tp @s ~ 14?~ ~?~4

然后在他視角前方五格召喚粒子:

execute at @e[name=k1] run particle minecraft:end_rod ^ ^?^5

我們發(fā)現(xiàn)粒子向下畫(huà)了一個(gè)1/4圓的圓弧然后就不動(dòng)了。(MC實(shí)體向下轉(zhuǎn)是正數(shù)角度,向上轉(zhuǎn)是負(fù)數(shù)角度。)

這是為什么呢?因?yàn)閷?shí)體的視角不能向下轉(zhuǎn)轉(zhuǎn)到后面

所以我們這里的思路是:給向前轉(zhuǎn)和向后轉(zhuǎn)的盔甲架分別賦予tag1和tag2

  1. 當(dāng)盔甲架在前半段時(shí)加tag1,從上往下旋轉(zhuǎn)

  2. 盔甲架向下轉(zhuǎn)到最下方時(shí)加刪除tag1并加tag2,然后轉(zhuǎn)180度轉(zhuǎn)到后方,再?gòu)淖钕路睫D(zhuǎn)到最上

  3. 盔甲架轉(zhuǎn)到最上方的時(shí)候刪除tag2并加tag1,然后轉(zhuǎn)180度轉(zhuǎn)到前方,然后繼續(xù)從上往下旋轉(zhuǎn),形成一個(gè)指令閉環(huán)

  4. 在盔甲架視角前方召喚一個(gè)粒子,圓的軌跡就出現(xiàn)了

豎方向圓的繪制原理

指令(這個(gè)圓的半徑是6):

#順序:從上往下

#讓y2旋轉(zhuǎn)前半段

execute as @e[type=minecraft:armor_stand,tag=A,tag=y2] at @s run tp @s -14 11 -115 ~ ~-4

#若y2轉(zhuǎn)到頂就原地橫向旋轉(zhuǎn)180度

execute as @e[type=minecraft:armor_stand,tag=A] at @s if entity @s[x_rotation=-90] run tp @s ~ ~ ~ ~180 ~

#[條件制約] 刪除tag"y2"

tag @e[type=minecraft:armor_stand,tag=A] remove y2

#[條件制約] 增加tag"x2"

tag @e[type=minecraft:armor_stand,tag=A] add x2

#讓x2轉(zhuǎn)后半段

execute as @e[type=minecraft:armor_stand,tag=A,tag=x2] at @s run tp @s -14 11 -115 ~ ~4

#如果x2轉(zhuǎn)到底就原地橫向旋轉(zhuǎn)180度轉(zhuǎn)到前方

execute as @e[type=minecraft:armor_stand,tag=A] at @s if entity @s[x_rotation=90] run tp @s ~ ~ ~ ~180 ~

#[條件制約] 刪除tag"x2"

tag @e[type=minecraft:armor_stand,tag=A] remove x2

#[條件制約] 增加tag"y2"

tag @e[type=minecraft:armor_stand,tag=A] add y2

#從盔甲架的四個(gè)方向顯示粒子

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^6 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^-6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^-6 0 0 0 0 0 force

12條命令,繪制一個(gè)完整圓。

這個(gè)圓還可以在此基礎(chǔ)上橫向自由旋轉(zhuǎn),指令:

#"... @s ~ ~ ~ ~15 ~"中,"15為要橫向旋轉(zhuǎn)的角度"

execute as @e[type=minecraft:armor_stand,tag=A] at @s run tp @s ~ ~ ~ ~15 ~


8條指令還是太繁瑣了,畫(huà)一個(gè)圓怎么會(huì)需要那么多命令?

所以我進(jìn)行了優(yōu)化,把檢測(cè)tag改成了檢測(cè)盔甲架的狀態(tài)。

思路:在盔甲架y軸初始角度為0的情況下,前半段的y軸角度必定是0,后半段旋轉(zhuǎn)180度后,盔甲架的y軸角度就變成了0+180=180度。使用了選擇器的限制條件"y_rotation=",實(shí)體的y軸旋轉(zhuǎn)角度。指令的數(shù)量就從12條優(yōu)化到了8條:

#盔甲架前半段的旋轉(zhuǎn)

execute as @e[type=minecraft:armor_stand,tag=A,y_rotation=0] at @s run tp @s -14 11 -115 ~ ~-4

#前半段轉(zhuǎn)到頂就原地橫向旋轉(zhuǎn)180度到后方

execute as @e[type=minecraft:armor_stand,tag=A] at @s if entity @s[x_rotation=-90] run tp @s ~ ~ ~ ~180 ~

#盔甲架的后半段旋轉(zhuǎn)

execute as @e[type=minecraft:armor_stand,tag=A,y_rotation=180] at @s run tp @s -14 11 -115 ~ ~4

#后半段轉(zhuǎn)到頂就原地橫向旋轉(zhuǎn)180度到前方

execute as @e[type=minecraft:armor_stand,tag=A] at @s if entity @s[x_rotation=90] run tp @s ~ ~ ~ ~180 ~

#從盔甲架的四個(gè)方向顯示粒子

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^6 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^-6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^-6 0 0 0 0 0 force

這種情況下,圓還是可以橫向自由旋轉(zhuǎn),但在旋轉(zhuǎn)后需要把第一條和第三條指令的選擇器里的"y_rotation"的判斷角度增加你要旋轉(zhuǎn)的度數(shù)。比如我要把這個(gè)圓橫向旋轉(zhuǎn)15度,那么第一條指令就改成:

execute as @e[type=minecraft:armor_stand,tag=A,y_rotation=15] at @s run tp @s -14 11 -115 ~ ~-4

第三條指令就改成:

execute as @e[type=minecraft:armor_stand,tag=A,y_rotation=195] at @s run tp @s -14 11 -115 ~ ~4

其實(shí),指令還可以繼續(xù)優(yōu)化。

思路:如果我只是畫(huà)圓,那么我沒(méi)必要讓盔甲架必須在豎方向完整轉(zhuǎn)一周。既然盔甲架在不橫向旋轉(zhuǎn)的情況下只能畫(huà)個(gè)半圓,那么我就讓它只畫(huà)半圓。但是我可以從四個(gè)方向顯示這個(gè)半圓,這樣四個(gè)半圓就重疊組合成了一個(gè)完整的圓。

指令:

#讓盔甲架從最上方轉(zhuǎn)到最下方

execute as @e[type=minecraft:armor_stand,tag=A] at @s run tp @s -14 11 -115 ~ ~-4

#盔甲架角度觸底后就把它的角度轉(zhuǎn)回最上方

execute as @e[type=minecraft:armor_stand,tag=A] at @s if entity @s[x_rotation=-90] run tp @s ~ ~ ~ ~ 90

#從盔甲架的四個(gè)方向顯示粒子

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^6 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^-6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^-6 0 0 0 0 0 force

六條命令繪制出了一個(gè)完整的豎方向圓。

優(yōu)點(diǎn):計(jì)算量少,且可以橫向自由旋轉(zhuǎn)。

缺點(diǎn):因?yàn)閳A心盔甲架的旋轉(zhuǎn)周期是半圓,所以不能拖拽其他盔甲架,想讓這個(gè)盔甲架以擺線法在圓內(nèi)內(nèi)嵌圖形的話,就還是要使用上面兩個(gè)版本。

接下來(lái)是在圓里內(nèi)嵌圖形,擺線法繪制正星形的思路都差不多,所以可以直接套用平面星形的繪制方法。

  1. 圓心自轉(zhuǎn)

  2. 圓周向圓心自轉(zhuǎn)的反方向自轉(zhuǎn)

  3. 圓心拖拽圓周

  4. 顯示粒子

  5. 堆疊命令來(lái)讓完整星形顯示。

召喚盔甲架:summon minecraft:armor_stand ~ ~ ~ {Tags:["A"]}

summon minecraft:armor_stand ~ ~ ~ {Tags:["B"]}

重置盔甲架的方向:execute as @e[type=minecraft:armor_stand,tag=A] at @s run tp @s ~ ~ ~ 0 0

execute as @e[type=minecraft:armor_stand,tag=B]?at @s run tp @s ~ ~ ~ 0 0

讓所有的盔甲架隱身:execute as @e[type=minecraft:armor_stand] at @s run data modify entity @s Invisible set value 1

接下來(lái)是繪制豎方向五芒星法陣的命令:

#這里使用的是通過(guò)判定盔甲架的y軸角度來(lái)畫(huà)豎方向圓的方案,沒(méi)有使用tag

#這里要求圓心和圓周兩個(gè)盔甲架的x軸、y軸的初始旋轉(zhuǎn)角度都為0

0#圓心盔甲架部分

#圓心盔甲架前半段旋轉(zhuǎn)

execute as @e[type=minecraft:armor_stand,tag=A,y_rotation=0] at @s run tp @s -14 17 -115 ~ ~-4

#圓心盔甲架前半段轉(zhuǎn)到頂就橫向旋轉(zhuǎn)180度轉(zhuǎn)到后面

execute as @e[type=minecraft:armor_stand,tag=A] at @s if entity @s[x_rotation=-90] run tp @s ~ ~ ~ ~180 ~

#圓心盔甲架的后半段旋轉(zhuǎn)

execute as @e[type=minecraft:armor_stand,tag=A,y_rotation=180] at @s run tp @s -14 17 -115 ~ ~4

#圓心盔甲架后半段轉(zhuǎn)到底就橫向旋轉(zhuǎn)180度到前面

execute as @e[type=minecraft:armor_stand,tag=A] at @s if entity @s[x_rotation=90] run tp @s ~ ~ ~ ~180 ~


#圓周盔甲架部分

#注意,圓周的盔甲架與圓心盔甲架的自轉(zhuǎn)方向相反,所以在y軸角度相同的情況下,圓心的x軸轉(zhuǎn)角若為正方向,那么圓心的旋轉(zhuǎn)方向就是負(fù)方向,所以第二條命令判斷的角度自然也就改成了正數(shù)角度,后面兩條命令的參數(shù)也隨之改變,注意觀察命令的細(xì)節(jié)

#圓周盔甲架的前半段旋轉(zhuǎn)

execute as @e[type=minecraft:armor_stand,tag=B,y_rotation=0] at @s run tp @s ~ ~ ~ ~ ~6

#圓周盔甲架前半段轉(zhuǎn)到底就橫向旋轉(zhuǎn)180度到后面

execute as @e[type=minecraft:armor_stand,tag=B] at @s if entity @s[x_rotation=90] run tp @s ~ ~ ~ ~180 ~

#圓周盔甲架的后半段旋轉(zhuǎn)

execute as @e[type=minecraft:armor_stand,tag=B,y_rotation=180] at @s run tp @s ~ ~ ~ ~ ~-6

#圓周盔甲架后半段轉(zhuǎn)到頂就橫向旋轉(zhuǎn)180度到前面

execute as @e[type=minecraft:armor_stand,tag=B] at @s if entity @s[x_rotation=-90] run tp @s ~ ~ ~ ~180 ~


#圓心拖拽圓周

execute as @e[type=minecraft:armor_stand,tag=A] at @s run tp @e[type=minecraft:armor_stand,tag=B] ^ ^ ^6


#圓心盔甲架攜帶的粒子

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^9.5 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^ ^-9.5 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^11 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=A] at @s run particle minecraft:end_rod ^ ^-11 ^ 0 0 0 0 0 force


#圓周盔甲架攜帶的粒子

execute as @e[type=minecraft:armor_stand,tag=B] at @s run particle end_rod ^ ^ ^3.5 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=B] at @s run particle end_rod ^ ^ ^3.5 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=B] at @s run particle end_rod ^ ^ ^3.5 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=B] at @s run particle end_rod ^ ^ ^3.5 0 0 0 0 0 force

一共17條命令,堆疊八次

效果:

這個(gè)五角星自帶自轉(zhuǎn)的效果,自轉(zhuǎn)的速度取決于你把命令堆疊了多少次。

就比如這個(gè)我堆疊了十六次命令的flame粒子法陣:

它轉(zhuǎn)得很歡樂(lè)( )


三、粒子球

擺線法繪制粒子球的原理就是讓豎方向圓以一定的速度進(jìn)行橫方向旋轉(zhuǎn),所以圓的半徑就是粒子球的半徑。

指令:

#這里采用的是六條命令畫(huà)圓的版本,所以圓心盔甲架不可在豎方向拖拽其他盔甲架

#圓心盔甲架旋轉(zhuǎn)前半段

#注意,這條指令在Y軸方向也設(shè)置了旋轉(zhuǎn)角度,所以這個(gè)豎方向圓的橫向轉(zhuǎn)速是2

execute as @e[type=minecraft:armor_stand,tag=500w] at @s run tp @s -14 20 -115 ~2 ~-4

#圓心盔甲架角度觸底后就把它的角度轉(zhuǎn)回最上方

execute as @e[type=minecraft:armor_stand,tag=500w] at @s if entity @s[x_rotation=-90] run tp @s ~ ~ ~ ~2 90

#從圓心盔甲架視線的四個(gè)方向顯示粒子

execute as @e[type=minecraft:armor_stand,tag=500w] at @s run particle minecraft:end_rod ^ ^ ^6 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=500w] at @s run particle minecraft:end_rod ^ ^6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=500w] at @s run particle minecraft:end_rod ^ ^-6 ^ 0 0 0 0 0 force

execute as @e[type=minecraft:armor_stand,tag=500w] at @s run particle minecraft:end_rod ^ ^ ^-6 0 0 0 0 0 force

堆疊四次,點(diǎn)到為止即可。

效果:

如果命令堆疊的次數(shù)過(guò)多效果就會(huì)變樣,比如我堆疊了八次:


四、三維空間內(nèi)任意平面的圓

這些是小豆給的命令,感謝小豆。

學(xué)習(xí)這部分前,建議讀者先去了解一下三角函數(shù)和歐拉角。

歐拉角旋轉(zhuǎn):https://www.bilibili.com/read/cv12107158

在MC里,存在著X、Y、Z體系的三維坐標(biāo)系,但是實(shí)體都只能上下和左右旋轉(zhuǎn),即世界坐標(biāo)的X軸和Y軸旋轉(zhuǎn),橫滾的Z軸是個(gè)不存在的軸。

所以我們要通過(guò)三角函數(shù)和三維向量來(lái)確定圓在進(jìn)行Z軸旋轉(zhuǎn)變化后得到的點(diǎn),然后把公式套入命令,得到變化后粒子所在的三維坐標(biāo)。

注:函數(shù)執(zhí)行的方向就是圓的朝向,如果不想瞬間畫(huà)圓,就把遞歸改成連閃。


五、公式法畫(huà)圖形

案例作者:小豆

公式法畫(huà)圖形就是通過(guò)直線的方程計(jì)算出粒子所在的點(diǎn),讀者可以自己把命令抄下來(lái)多寫(xiě)寫(xiě),學(xué)習(xí)一下是如何把公式代入命令的。這個(gè)五角星一樣可以在三維空間任意角旋轉(zhuǎn),函數(shù)執(zhí)行的方向就是五角星的朝向,不想瞬間畫(huà)出圖形就把高頻改成連閃。

?

所以這里的效果差不多都可以用以上的原理做出來(lái):

【我的世界】史詩(shī)工程—指令魔法陣??https://www.bilibili.com/video/BV1xb4y1m7yc


《我的世界》【1.16.5】Java版實(shí)用粒子教程(六)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
留坝县| 永清县| 卓尼县| 翁源县| 孟连| 大渡口区| 贵定县| 项城市| 淮安市| 新巴尔虎左旗| 绍兴县| 东光县| 同心县| 东兴市| 淮安市| 乐安县| 肥乡县| 特克斯县| 宁南县| 滦南县| 栾城县| 文昌市| 台北市| 通海县| 婺源县| 奉节县| 牙克石市| 楚雄市| 右玉县| 乌海市| 宝坻区| 饶平县| 闽侯县| 潞西市| 四子王旗| 崇文区| 吉木乃县| 抚顺市| 沙坪坝区| 封开县| 长寿区|