好,我们今天来梳理一下BossAI的基本思路
AI基本操作
我们先来了解一下tr的坐标系
好,我们再来了解两个AI编写最重要的值
velocity
速度
position
位置
position
就是坐标,没什么好说的
velocity
就是第一帧你在(0,0) 你的速度是(1,1),那么第二帧你就在(1,1), 第三帧你就在(2,2),以此类推
AI基本操作
写一个ai 你一般需要一个计时器,一般用 NPC.ai[0]
,然后在ai里每帧++
public override void AI(){ NPC.ai[0]++; }
好,用计时器我们可以实现很多ai,但是还不够 我们还可以利用一些别的属性
例如当npc的血量低于100,xxx
当npc在玩家上方,xxx
当计时器%10==0,xxx
就是这样 当然这篇只是给你们点拨一个思路,具体实现还得看以后的教程
带你构思第一个AI
好,我们来构思一个简单的ai
我们先来写伪代码
当计时器小于等于200 切换到状态1
当计时器大于200小于400 切换到状态2
当计时器等于400 切换到状态3 计时器归零
- 状态1:向玩家以10f的速度创过来
- 状态2:原地不动回血
- 状态3: 瞬移到玩家头上
很简单是吧,来,我们把他写成代码
public override void AI(){ NPC.ai[0]++; NPC.TargetClosest(true); Player p = Main.player[NPC.target]; if(NPC.ai[0]<=200) { NPC.velocity = 10*(p.Center - NPC.Center).SafeNormalize(Vector2.Zero); } if(NPC.ai[0]>200&&NPC.ai[0]<400) { NPC.velocity = Vector2.Zero; NPC.life+=5; } if(NPC.ai[0]==400) { NPC.position=p.position + new Vector2(0,-200); NPC.ai[0]=0; } }
有人就要问了,这两行代码什么意思
NPC.TargetClosest(true); Player p = Main.player[NPC.target];
第一行是让npc找离自己最近的玩家
第二行是把这个指定的玩家从列表里找出来
还是肥肠地简单啊
小作业
试着大致复刻一下原版的史莱姆AI吧