游戏和做大型系统真的很象.
以前总奇怪,做那么简单的网页或者客户端,为什么需要绕个大圈子搞MVC结构?
系统大了,自然要把表现和业务逻辑的代码分开,这样思路清晰.

言归正传,在我的即时战斗游戏里面有两个定时器,一个负责画面可移动元素的脉搏.一个负责生孩子进度.在游戏的时候部队一多就开始弹出异常窗口,提示:集合已经改变,不能再继续.这种情况一般都是在对集合正在循环的时候,比如:
foreach(IUnit unit in UnitAll){
  unit.Drive(radarInfo);
}
在对UnitAll循环的时候,很可能UnitAll其中的一个部队已经在另外的线程中中弹牺牲,被从UnitAll中剔除.这时候就需要在foreach前lock(UnitAll),同时另外一个线程中处理部队牺牲的方法中也要lock(UnitAll)再操作集合.

由此想到....几率问题... 操作少的系统中一般人都会忽视同步问题,时间长了一样会有出错的几率.如果在开发中不去解决,在后面维护过程中就很可能听到客户报告“发现UFO问题”....

posted on 2004-05-26 00:20  steeven  阅读(1033)  评论(1编辑  收藏  举报