纳金网
标题:
协同程序和状态机的Update混用, 用来设置等待时间
[打印本页]
作者:
王者再临
时间:
2014-4-30 23:35
标题:
协同程序和状态机的Update混用, 用来设置等待时间
我在代码中使用的混用方法,设置一个空的状态,让它在循环的时候跳到空的状态中 但是不做任何事情
这样就能实现混用,减少update中使用等待时间之类的代码行数...
Update()
{
if(gameState == GameState.game)
{
....
if(Input.GetMouseDown(1)) {
gameState = GameState.wait
StartCoroutine( RoleAttack( ) ); //此时Update仍在执行,不过跳到了GameState.wait中,所以什么也没做
//RoleAttack 也正确的执行了并且只执行了一次,正确的等待了2秒
}
....
}
else if(gameState == GameState.wait)
{
//do nothing
}
}
IEnumerator RoleAttack()
{
.....
yield return new WaitForSeconds(2);
//最后记得改变状态回来
gameState = GameState.game ; // 跳回循环中
}
复制代码
我的感觉:
1使用协同程序写游戏的Loop,特别是涉及到等待时间相关的,协同程序的代码量相当少,使程序更容易维护
2 使用Update() 来写Loop 是一种习惯 -,- 是一种流水线形式的处理,是一种从上古的c++遗留下来的优良传统orz...
3 使用协同程序时 比较复杂的时候,程序逻辑难以读懂(智商太低orz)
4 千万不要这样写:
Update() {
//没有任何状态机就跑协同
StartCoroutine( Test( ) );
//恭喜你每一帧都开了一个协同程序,如果你不怕死机的话
}
复制代码
另外:我做了一个协同程序和Update的性能测试, 我猜测使用协同时 图片的读取效率 更好(GPU更好的使用?)
可能是我做得不够彻底,得出的结果是它们的性能几乎一致(求大神论证)
作者:
hyui
时间:
2014-5-1 09:13
great stuff!
作者:
viiqii
时间:
2014-5-8 15:40
这个做法真不错。。学习~~
欢迎光临 纳金网 (http://wwww.narkii.com/club/)
Powered by Discuz! X2.5