星际争霸1.08通关(星际争霸本质上是个单线程游戏)
星际争霸1.08通关(星际争霸本质上是个单线程游戏)那如果你(或者AI)发出控制指令,则相当于修改了某个对象的状态,在这一帧将这个变化计算进去,宏观上呈现出来,就是“兵听你的命令指哪走哪”了。所以简单说,就是每一帧游戏遍历所有对象(兵种、地图格子、特效等),计算出它在下一帧的状态,然后将下一帧应该有的画面呈现给你,就跟实时生成电影数据一样。例如,某个机枪兵当前这一帧的状态是:坐标(x y),面向右下,运动方向右下,姿势为A03。那么星际程序就在这一帧结束的之前算出它下一帧的状态是:坐标(x 1 y 1),面向右下,运动方向右下,姿势A04。然后下一帧的时候,机枪兵就会在新坐标重新显示为A04这个姿势图片,这样反复进行,你就看到他一直往右下在走了。当然,他走过的地方,需要重新显示为地图位置的背景,即地图的状态也会改变(实际上地图是按一个个小格子为单位来组合变化的)。
By:冒泡
具体原理高票答案分析得不错,我差不多补充下自己当初的猜测(也是做游戏时候想到的).
星际这种游戏,其实你可以认为它就是一个单线程的按帧运行,也就是说你看到的游戏进程是一帧一帧进行的,就像电影24帧每秒你看着像是连续的一样.
游戏也差不多,只不过多了一个游戏需要响应你的控制,如果你不控制,那就跟看电影一样了,每个单位只是按照预定的状态来自动运行(实际上AI的操作也算在控制之内)。
例如,某个机枪兵当前这一帧的状态是:坐标(x y),面向右下,运动方向右下,姿势为A03。
那么星际程序就在这一帧结束的之前算出它下一帧的状态是:坐标(x 1 y 1),面向右下,运动方向右下,姿势A04。然后下一帧的时候,机枪兵就会在新坐标重新显示为A04这个姿势图片,这样反复进行,你就看到他一直往右下在走了。
当然,他走过的地方,需要重新显示为地图位置的背景,即地图的状态也会改变(实际上地图是按一个个小格子为单位来组合变化的)。
所以简单说,就是每一帧游戏遍历所有对象(兵种、地图格子、特效等),计算出它在下一帧的状态,然后将下一帧应该有的画面呈现给你,就跟实时生成电影数据一样。
那如果你(或者AI)发出控制指令,则相当于修改了某个对象的状态,在这一帧将这个变化计算进去,宏观上呈现出来,就是“兵听你的命令指哪走哪”了。
小编真心不知道Ob还能变飞龙,难道是召唤虫族农民么。。。
当年的程序员和现在的程序猿不是同一个程序媛!
还有很多有趣的bug,可惜小编也没有经历过。
隐形的地堡,小编是万万没想到连建筑物都可以隐形了!
哈哈哈,有了这些bug才有人们对星际争霸这个游戏孜孜不倦的研究啊!
小编知道,不过才23!
哈哈哈,谁要敢用打完星际就直接真人PK了!
坦克架大和是怎么搞的,这个小编只有耳闻未见其真容!
因为全部继承的是小狗的属性,35血5攻,比想象中脆弱。。。
现在的电脑太快。。。突然怀念起windows98那个年代的电脑系统了。
隐形飞龙用仲裁者也可以变,简直有一万种变法!
是啊,免费变,只是变的时候需要准备一定的押金,变完后就退回去了,哈哈哈哈哈!
接上。
星际1在normal速度下,游戏帧率是15,fastest下是22,在一帧几十毫秒的时间内要计算完应有的变化,如果机器太慢或需要计算的太多(比如你用个烂机器去跑,还造了N多兵),则每一帧计算时间超出最大限度,就有可能出现两种情况:
一个是帧率被拖慢(也就是俗称的“卡顿”),或者星际程序自己放弃了一些对象状态的下一步计算(人多的时候有些兵会傻掉不动)。
以现在的眼光看,22帧简直不是个事,但当年那个机器能做到这个还是挺难的,所以在这里也吹一波暴雪!
所以你就知道,你做一个操作后,这个操作的结果需要至少等到下一帧才有反应。
如果你操作很快,一个帧之间做了多次,则星际可能需要将这些操作做一些调整,比如一帧的50毫秒内,你分别命令同一个兵往上下左右走,则只会保留最后一个动作,下一帧会直接往右走。
而如果你对多个兵做了命令和操作,则可能都需要记录并在下一帧之前统一计算。
所以我怀疑程序是记录“变lurker”这个命令时过于简化了,按理应该记录“把xxx,xxx,xxx号刺蛇变成lurker”,而程序员为了偷懒或者考虑到效率问题,就直接记录了一个简单的变lurker的操作。
所以在同一帧中存在另外的选择操作时,就会错位了,至于为什么是飞龙而不是其他的,就看具体实现了。
最后,如果是联网程序,则你的操作需要同步给所有人后,你命令的兵才能同步开始动作,而如果1帧之内无法同步,一样会卡帧。
所以上战网一般要调整一下操作的延迟,手工设置操作的响应时间,这样可以让游戏更流畅。
以上是我的拙见,不知大家有何看法。