《泰拉瑞亞》飾品製作方法 (3) - 遊戲狂
廣告

《泰拉瑞亞》飾品製作方法 (3)

請拿手機掃描此QRCODE

傳到手機看

2021-12-31

廣告

【DEBUG-查錯階段】

首先是同時掛上蒸汽朋克翅膀、火焰粒子以及星星gore的照片一張

《泰拉瑞亞》飾品製作方法

廣告

 這裡需要注意一點:cs開頭的using應該是using Microsoft.Xna.Framework;

也就是說,模板應該是如下:

using System;

using TAPI;

using Microsoft.Xna.Framework;

namespace TAPI.【MOD名稱】{

public class 【道具名稱】:ModItem{

public 【道具名稱】(ModBase modbase,Item i):base(modbase,i){}

public override void Effects(Player p){

//等會就是在這裡插入飾品訊息滴~

}

}

這篇主要講述的是運用TR原版的一些方法組來答到寓守於攻、不戰而退敵的效果

首先……先介紹一些需要用到的程式碼

1.Rectangle(組詞法:rect是 “四” ,angle是 “角” ,四個牆角即為矩形~)

要想快速而方便地判定範圍,首先要在TR裡表示一個矩形(Rectangle)。

TR裡聲明一個矩形的方法是使用new方法組,也就是new Rectangle(坐標X,坐標Y,寬,高)

舉例:new Rectangle(100,200,300,400)表示的是如下圖的矩形:

 《泰拉瑞亞》飾品製作方法

左上頂點坐標(100,200),長300寬400,右下頂點坐標(100+300,200+400),表示的是一個範圍(嗯沒錯那個就是66ccff)

注:矩形的坐標和長寬必須是整數,在使用到玩家或NPC坐標的地方請在前面加個(int),表示取整

2.Rectangle.Intersects(Rectangle r1,Rectangle r2)

intersects方法組,隸屬於xna特有的數學系(重申一遍前面cs格式的.Graphics一定要刪掉!),用來判定兩個矩形是否相交,輸出邏輯值(真或假)

p.s.判定是否在範圍內時好像比直接計算距離略快一點,缺點就是判定是方的不好看

……嘛,戰鬥時誰還管好不好看呢?

3.foreach(類型 代號 in 組)

就像這個語句的名字一樣,它可以把某個組裡的所有東西都拉出來給一個代號,比如foreach(NPC n in Main.NPC)就是檢索遊戲中所有NPC並給每個NPC起個名字:n;接下來這個n將要受到什麽程式碼的操(rou)作(lin),就完全是個人喜好的問題了

4.NPC.AddBuff(int Buff類型,int Buff持續時間)

是時候讓那些可惡的怪物們嚐嚐FFF團的怒火了!有了這個方法組,給NPC隨意加deBuff將不是夢想!

·Buff類型就是想要加的Buff的編號,比如燃燒是24,詛咒燃燒是39,霜火燃燒是44,等等

·Buff持續時間是按幀算的,60幀=1秒(0處理落率),如果這裡寫60就是一秒,寫3600是一分鐘,寫23333333就是約4.50102874天,依據自己需求來決定時間吧

5.if(條件)

直譯:如果滿足條件就執行後面的內容,條件應為邏輯值

5.2.else

“否則” 是 “如果” 的好姬友,用於在if的條件不成立時執行後面的語句

5.2.1.多層判定

那啥……else後面也能跟if,所以如果多重判定就可以寫成:

if(條件1){程式碼段1}

else if(條件2){程式碼段2}

else if(條件3){程式碼段3}

else……

……

……else{都不滿足時的程式碼段}

5.2.邏輯值的運算

如果需要同時判定多個條件成立,幾個條件就套上幾個if?如果需要多個條件任一成立,幾個條件就寫幾個else,然後在裡面寫相同語句?乃們out了!其實許多條件也是可以合併成一個條件的

需要用到的就是邏輯運算符:且(&&)、或(||)和非(!)

且就是數字7上面那個符號打兩遍,或就是右shift上面那個按鍵+shift打出來的(絕對值括號),非就是感歎號(全都是半角)

且和或用於連接兩個邏輯值,放於兩個邏輯值之間;非放在一個邏輯值的前面,用於否定這個邏輯值(真假顛倒)

5.2.1.幾個邏輯運算的法則

1.!!a就是a

2.!(a&&b)就是(!a)||(!b)

3.!(a||b)就是(!a)&&(!b)

例題1:輸出一個邏輯值M,在a和b同時不成立的前提下要求滿足以下三點中任意兩點便成立:①b和c任一成立②d和e同時成立③f成立

解1:M=(!a)&&(!b)&&(((b||c)&&d&&e)||(f&&d&&e)||((b||c)&&f))

評價:簡單粗♂暴,適用於對多重括號很熟練的兄貴們

解2:int m=0;

if(b||c)m++;

if(d&&e)m++;

if(f)m++;

M=(!(a||b))&&(m>=2)

評價:略運用了化簡的技巧,適用於懶♂的兄貴們

6.反擊時刻!

現在讓我們把這四條組成一個給附近300像素以內NPC上霜火deBuff的效果吧~

6.1.思路(伸手黨可以跳過這一段直接複製後方的成品,感興趣的還是看一下吧~)

先遍曆所有NPC記作n:foreach(NPC n in Main.NPC)

操♂作開始,首先是確定範圍:

NPC所在的矩形是new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height)

玩家上下左右300像素的矩形是new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600)

接下來是判定相交同時確保n還活著,而且是敵對NPC:

if(n.active&&!n.friendly&&new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height).Intersects(new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600)))

最後嘛……嚐嚐來自北國的FFF團精神吧!

n.AddBuff(44,300);

6.2.成品程式碼:

foreach(NPC n in Main.NPC){

if(n.active&&!n.friendly&&new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height).Intersects(new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600))){

n.AddBuff(44,300);

}

}


來源:遊俠網

廣告

廣告

遊戲資訊

泰拉瑞亞 (Terraria)

類別: 冒險
平台: PC, PS4, XboxONE, Switch, 蘋果, 安卓
開發: Re-Logic
發行: Re-Logic
上市: 2011年05月17日

《泰拉瑞亞(Terraria)》是一款由Re-Logic製作並發行的動作冒險類遊戲,玩家可以在遊戲中做很多事情:製造武器戰勝各種各樣的敵人及群落;挖掘地下尋找器材配件、金錢和其他有用的東西;收集木材,石材,礦石等資源;用世界裡的一切創造你需要的東西並守護它。

更多 泰拉瑞亞 攻略|新聞

廣告
【DEBUG-查錯階段】 https://gamemad.com/guide/162084 首先是同時掛上蒸汽朋克翅膀、火焰粒子以及星星gore的照片一張 https://img1.gamemad.com/2021/12/31/uB9gwsH3.jpg  這裡需要注意一點:cs開頭的using應該是using Microsoft.Xna.Framework; 也就是說,模板應該是如下: using System; using TAPI; using Microsoft.Xna.Framework; namespace TAPI.【MOD名稱】{ public class 【道具名稱】:ModItem{ public 【道具名稱】(ModBase modbase,Item i):base(modbase,i){} public override void Effects(Player p){ //等會就是在這裡插入飾品訊息滴~ } } } 這篇主要講述的是運用TR原版的一些方法組來答到寓守於攻、不戰而退敵的效果 首先……先介紹一些需要用到的程式碼 1.Rectangle(組詞法:rect是 “四” ,angle是 “角” ,四個牆角即為矩形~) 要想快速而方便地判定範圍,首先要在TR裡表示一個矩形(Rectangle)。 TR裡聲明一個矩形的方法是使用new方法組,也就是new Rectangle(坐標X,坐標Y,寬,高) 舉例:new Rectangle(100,200,300,400)表示的是如下圖的矩形:   https://img1.gamemad.com/2021/12/31/asuCuND6.jpg 左上頂點坐標(100,200),長300寬400,右下頂點坐標(100+300,200+400),表示的是一個範圍(嗯沒錯那個就是66ccff) 注:矩形的坐標和長寬必須是整數,在使用到玩家或NPC坐標的地方請在前面加個(int),表示取整 2.Rectangle.Intersects(Rectangle r1,Rectangle r2) intersects方法組,隸屬於xna特有的數學系(重申一遍前面cs格式的.Graphics一定要刪掉!),用來判定兩個矩形是否相交,輸出邏輯值(真或假) p.s.判定是否在範圍內時好像比直接計算距離略快一點,缺點就是判定是方的不好看 ……嘛,戰鬥時誰還管好不好看呢? 3.foreach(類型 代號 in 組) 就像這個語句的名字一樣,它可以把某個組裡的所有東西都拉出來給一個代號,比如foreach(NPC n in Main.NPC)就是檢索遊戲中所有NPC並給每個NPC起個名字:n;接下來這個n將要受到什麽程式碼的操(rou)作(lin),就完全是個人喜好的問題了 4.NPC.AddBuff(int Buff類型,int Buff持續時間) 是時候讓那些可惡的怪物們嚐嚐FFF團的怒火了!有了這個方法組,給NPC隨意加deBuff將不是夢想! ·Buff類型就是想要加的Buff的編號,比如燃燒是24,詛咒燃燒是39,霜火燃燒是44,等等 ·Buff持續時間是按幀算的,60幀=1秒(0處理落率),如果這裡寫60就是一秒,寫3600是一分鐘,寫23333333就是約4.50102874天,依據自己需求來決定時間吧 5.if(條件) 直譯:如果滿足條件就執行後面的內容,條件應為邏輯值 5.2.else “否則” 是 “如果” 的好姬友,用於在if的條件不成立時執行後面的語句 5.2.1.多層判定 那啥……else後面也能跟if,所以如果多重判定就可以寫成: if(條件1){程式碼段1} else if(條件2){程式碼段2} else if(條件3){程式碼段3} else…… …… ……else{都不滿足時的程式碼段} 5.2.邏輯值的運算 如果需要同時判定多個條件成立,幾個條件就套上幾個if?如果需要多個條件任一成立,幾個條件就寫幾個else,然後在裡面寫相同語句?乃們out了!其實許多條件也是可以合併成一個條件的 需要用到的就是邏輯運算符:且(&&)、或(||)和非(!) 且就是數字7上面那個符號打兩遍,或就是右shift上面那個按鍵+shift打出來的(絕對值括號),非就是感歎號(全都是半角) 且和或用於連接兩個邏輯值,放於兩個邏輯值之間;非放在一個邏輯值的前面,用於否定這個邏輯值(真假顛倒) 5.2.1.幾個邏輯運算的法則 1.!!a就是a 2.!(a&&b)就是(!a)||(!b) 3.!(a||b)就是(!a)&&(!b) 例題1:輸出一個邏輯值M,在a和b同時不成立的前提下要求滿足以下三點中任意兩點便成立:①b和c任一成立②d和e同時成立③f成立 解1:M=(!a)&&(!b)&&(((b||c)&&d&&e)||(f&&d&&e)||((b||c)&&f)) 評價:簡單粗♂暴,適用於對多重括號很熟練的兄貴們 解2:int m=0; if(b||c)m++; if(d&&e)m++; if(f)m++; M=(!(a||b))&&(m>=2) 評價:略運用了化簡的技巧,適用於懶♂的兄貴們 6.反擊時刻! 現在讓我們把這四條組成一個給附近300像素以內NPC上霜火deBuff的效果吧~ 6.1.思路(伸手黨可以跳過這一段直接複製後方的成品,感興趣的還是看一下吧~) 先遍曆所有NPC記作n:foreach(NPC n in Main.NPC) 操♂作開始,首先是確定範圍: NPC所在的矩形是new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height) 玩家上下左右300像素的矩形是new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600) 接下來是判定相交同時確保n還活著,而且是敵對NPC: if(n.active&&!n.friendly&&new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height).Intersects(new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600))) 最後嘛……嚐嚐來自北國的FFF團精神吧! n.AddBuff(44,300); 6.2.成品程式碼: foreach(NPC n in Main.NPC){ if(n.active&&!n.friendly&&new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height).Intersects(new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600))){ n.AddBuff(44,300); } } 來源:遊俠網
https://gamemad.com/guide/162084
0