Re: [闲聊] 到底要怎么用FSM写个简单的AI

楼主: SecondRun (雨夜琴声)   2021-07-15 22:20:30
问点AI的问题 但跟FSM无关
战棋所以每次都是Idle的时候执行RunAI()
不过我看之前的专案跟这次的专案流程有一点不同
第一种 :
void Idle.RunAI()
{
ai = unit.AI;
ai.Think();
}
void BattleController.ChangeAI(BattleUnit unit, State state, object params)
{
switch (state)
{
State.Fear:
var ai = new FearAI();
ai.SetParams(params);
unit.AI = ai;
return;
}
}
第二种 :
void Idle.RunAI()
{
switch (unit.state)
{
State.Fear:
if (fearAI == null) fearAI = new FearAI();
ai = fearAI;
ai.SetParams(unit.stateParams);
break;
default:
ai = normalAI;
break;
}
ai.SetEntity(unitEntity);
ai.Think();
}
void BattleController.ChangeAI(BattleUnit unit, State state, object params)
{
unit.state = state;
unit.stateParams = params;
}
第一种每个角色身上都有AI,在角色改变状态的时候直接把unit.AI置换掉
第二种就Idle里面塞了一堆AI,轮到角色的时候再把角色的参数丢到AI里面
两种做法好像...差不多??
第二种是不是好管理一点啊
作者: iovoecu (XX)   2021-07-15 22:21:00
大师==
作者: wwndbk (黑人问号)   2021-07-15 22:26:00
恩恩 跟我想的依样
作者: lturtsamuel (港都都教授)   2021-07-15 22:30:00
已经叫idle就不该让它有是其他状态的可能 应该用型别来保证这一点
作者: siscon (laisan)   2021-07-15 22:33:00
第一种有写跟没写一样idle跟fear好像是不同阶层的state 没有冲突 吧
作者: lturtsamuel (港都都教授)   2021-07-15 22:35:00
策略模式的话 一般会在别的地方做状态判断 把策略赋给他 要用的时候就不要判断是不过我蛮不喜欢看到策略模式的 很难tracecodeㄏㄏ
作者: devilkool (对猫毛过敏的猫控)   2021-07-15 22:47:00
策略模式搭简单工厂

Links booklink

Contact Us: admin [ a t ] ucptt.com