【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);
}
}
來源:遊俠網