跳至正文

BossAI基本思路

好,我们今天来梳理一下BossAI的基本思路

AI基本操作

我们先来了解一下tr的坐标系

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吧

发表回复