《泰拉瑞亚》饰品制作方法( 三 )


左上顶点坐标(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.成品代码:

推荐阅读