快捷搜索:  汽车  科技

星际争霸1.08通关(星际争霸本质上是个单线程游戏)

星际争霸1.08通关(星际争霸本质上是个单线程游戏)那如果你(或者AI)发出控制指令,则相当于修改了某个对象的状态,在这一帧将这个变化计算进去,宏观上呈现出来,就是“兵听你的命令指哪走哪”了。所以简单说,就是每一帧游戏遍历所有对象(兵种、地图格子、特效等),计算出它在下一帧的状态,然后将下一帧应该有的画面呈现给你,就跟实时生成电影数据一样。例如,某个机枪兵当前这一帧的状态是:坐标(x y),面向右下,运动方向右下,姿势为A03。那么星际程序就在这一帧结束的之前算出它下一帧的状态是:坐标(x 1 y 1),面向右下,运动方向右下,姿势A04。然后下一帧的时候,机枪兵就会在新坐标重新显示为A04这个姿势图片,这样反复进行,你就看到他一直往右下在走了。当然,他走过的地方,需要重新显示为地图位置的背景,即地图的状态也会改变(实际上地图是按一个个小格子为单位来组合变化的)。

By:冒泡

具体原理高票答案分析得不错,我差不多补充下自己当初的猜测(也是做游戏时候想到的).

星际这种游戏,其实你可以认为它就是一个单线程的按帧运行,也就是说你看到的游戏进程是一帧一帧进行的,就像电影24帧每秒你看着像是连续的一样.

游戏也差不多,只不过多了一个游戏需要响应你的控制,如果你不控制,那就跟看电影一样了,每个单位只是按照预定的状态来自动运行(实际上AI的操作也算在控制之内)。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(1)

例如,某个机枪兵当前这一帧的状态是:坐标(x y),面向右下,运动方向右下,姿势为A03。

那么星际程序就在这一帧结束的之前算出它下一帧的状态是:坐标(x 1 y 1),面向右下,运动方向右下,姿势A04。然后下一帧的时候,机枪兵就会在新坐标重新显示为A04这个姿势图片,这样反复进行,你就看到他一直往右下在走了。

当然,他走过的地方,需要重新显示为地图位置的背景,即地图的状态也会改变(实际上地图是按一个个小格子为单位来组合变化的)。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(2)

所以简单说,就是每一帧游戏遍历所有对象(兵种、地图格子、特效等),计算出它在下一帧的状态,然后将下一帧应该有的画面呈现给你,就跟实时生成电影数据一样。

那如果你(或者AI)发出控制指令,则相当于修改了某个对象的状态,在这一帧将这个变化计算进去,宏观上呈现出来,就是“兵听你的命令指哪走哪”了。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(3)

小编真心不知道Ob还能变飞龙,难道是召唤虫族农民么。。。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(4)

当年的程序员和现在的程序猿不是同一个程序媛!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(5)

还有很多有趣的bug,可惜小编也没有经历过。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(6)

隐形的地堡,小编是万万没想到连建筑物都可以隐形了!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(7)

哈哈哈,有了这些bug才有人们对星际争霸这个游戏孜孜不倦的研究啊!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(8)

小编知道,不过才23!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(9)

哈哈哈,谁要敢用打完星际就直接真人PK了!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(10)

坦克架大和是怎么搞的,这个小编只有耳闻未见其真容!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(11)

因为全部继承的是小狗的属性,35血5攻,比想象中脆弱。。。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(12)

现在的电脑太快。。。突然怀念起windows98那个年代的电脑系统了。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(13)

隐形飞龙用仲裁者也可以变,简直有一万种变法!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(14)

是啊,免费变,只是变的时候需要准备一定的押金,变完后就退回去了,哈哈哈哈哈!

接上。

星际1在normal速度下,游戏帧率是15,fastest下是22,在一帧几十毫秒的时间内要计算完应有的变化,如果机器太慢或需要计算的太多(比如你用个烂机器去跑,还造了N多兵),则每一帧计算时间超出最大限度,就有可能出现两种情况:

一个是帧率被拖慢(也就是俗称的“卡顿”),或者星际程序自己放弃了一些对象状态的下一步计算(人多的时候有些兵会傻掉不动)。

以现在的眼光看,22帧简直不是个事,但当年那个机器能做到这个还是挺难的,所以在这里也吹一波暴雪!

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(15)

所以你就知道,你做一个操作后,这个操作的结果需要至少等到下一帧才有反应。

如果你操作很快,一个帧之间做了多次,则星际可能需要将这些操作做一些调整,比如一帧的50毫秒内,你分别命令同一个兵往上下左右走,则只会保留最后一个动作,下一帧会直接往右走。

而如果你对多个兵做了命令和操作,则可能都需要记录并在下一帧之前统一计算。

所以我怀疑程序是记录“变lurker”这个命令时过于简化了,按理应该记录“把xxx,xxx,xxx号刺蛇变成lurker”,而程序员为了偷懒或者考虑到效率问题,就直接记录了一个简单的变lurker的操作。

所以在同一帧中存在另外的选择操作时,就会错位了,至于为什么是飞龙而不是其他的,就看具体实现了。

星际争霸1.08通关(星际争霸本质上是个单线程游戏)(16)

最后,如果是联网程序,则你的操作需要同步给所有人后,你命令的兵才能同步开始动作,而如果1帧之内无法同步,一样会卡帧。

所以上战网一般要调整一下操作的延迟,手工设置操作的响应时间,这样可以让游戏更流畅。

以上是我的拙见,不知大家有何看法。

猜您喜欢: