这个模型很顺手,相信大多数人能立刻习惯.
举个游戏里面的例子,如果对于某个怪物,或者什么需要描述行为的对象:
AI_update()
{
walk_2_step();
if(found_ememy()){
attack();
}
else{
sleep_2_sec();
}
random_turn();
}
然后如果这个monster有消息处理函数:
switch(message.type){
case UPDATE: AI_update(); break; // blocking
case QUERY : respond() ; break; // respond function, non-blocking
case ......;
}
这时候就有了麻烦:
当怪物得到一个时间片自我update的时候,需要调用这个AI_update()
但是AI_update()描述了一段时间的持续性为, 不可能在一个时间片完全执行.
这个coroutine model可以把函数改成:
AI_update()
{
walk_2_step(); yield;
if(found_ememy()){
attack(); yield;
}
else{
sleep_2_sec(); yield;
}
random_turn(); yield;
}
每次执行一个动作后就停住,等到下一个UPDATE消息来的时候在继续执行AI_update()函数.
不知道这个例子是否恰当?
--
FROM 158.140.1.*