从一个简单的星际运行原理到第11大核心竞争力
作者:57 文章来源: 更新时间:09-05-10
用移动阻挡你的敌人——从一个简单的星际运行原理到第11大核心竞争力
这个标题中的“第11大”只是戏谑的自称,吸引眼球,请大家不必当真。
多年以前我就注意到一个现象,这个现象估计很多人有过隐约的感觉,但我从未看见大家讨论过。也许是我没看见这些讨论,那此文权当复习。如果的确是大家未曾讨论过的东西,则它确实可以带给你一点帮助。
关于这个现象的隐约感受就是:“作战时,一边打一边微调最前方的部分的走位,似乎可以对自己有利。”不过这太笼统了,有的人的感受更具体一点:“微调最前方的部队的走位,似乎可以延缓对方的冲锋,即使我只是在胡乱地微调。”
例证之一,就是用雷车阻挡zelot。TVP阵地决战,有的人似乎有很好的“雷车阵型”,但雷车都站住不动,似乎很容易就被插入坦克阵,zelot会冲过那些细小的缝隙向坦克近身。而如果你毫无目的地扯动一下雷车,即使看上去雷车之墙空隙更大了,那些zelot却傻傻地被卡住,容易在近身前就被消灭。
这是为什么呢?让我们做一个小实验。两个SCV排成一条横线,让左边的SCV走到右边SCV的右边空地:
SCV甲SCV乙目的地
我们会发现,SCV甲将会灵活地绕开SCV乙,到达目的地。视距离和方向的不同,SCV甲可能会直接向上一小格,然后横向移动到目的地上方,再下一格;或者先接近SCV乙,然后贴着SCV乙绕开,再下到目的地,等等。无论电脑为你选择哪一种走法,整个过程都是流畅的,没有任何停顿。
实际上,当SCV甲被下达MOVE指令的同时,电脑已经算好了全部的行走路线。之后,它只是按照预定路线移动罢了。在计算路线的时候,阻挡的SCV乙和其他诸如河流、高地一样,成为地形的一部分。因此,算好的路线已经避开了SCV乙。
有的朋友要问了:“但是一个SCV和一块高地不同,SCV乙是活动单位,你都按照下达MOVE指令时SCV乙的位置来计算地形,那到时候SCV乙走掉了了,这个路线不是就不够优秀了?本来可以走直线,还是要走弯路。”
图示
您问得好,可以猜想,的确会走弯路。不信再做一个实验:选择那种SCV甲会贴着SCV乙绕开的路线,在SCV甲到达SCV乙身前之前,就把SCV乙移走,看看SCV甲怎么动?不出所料,SCV甲还是走他的预定路线,绕开了一个不存在的SCV乙的身位,,就好像那里有个隐形的SCV乙一样!
为什么会这样设计呢?Blizzard为什么不做得更好,让它走直线呢?(解决办法:SCV甲每走一格都重新集算路线,就可以在SCV乙让开以后,走上直线的幸福道路了)
这是因为,计算路径是一个非常耗时间的运算。(题外话:计算精确的最优路径是一个NP问题,实际一般是用近似的最优路径的A*算法。即使你认为现在电脑比当时快得多,是否可以采用计算精确路径的算法,答案也是不可能,这超出了计算机的计算能力。即使是采用近似算法,这个计算也不怎么快。)
既然非常耗时,那我们就要节约计算资源了。所以,我们一旦计算了一条路线,就会坚定的让它走下去。(再顺便一提,move到一个指定空地和move到一个活动单位的位置不同。比如你用狗追scv,狗的目的地就是不断变化的。但是由于计算路线很慢,所以不可能每当scv移动一点点都去重新计算路线,而是要间隔一定时间才重新计算路线。这就是为什么scv不断转向的时候狗会犯傻,从而活得更长久的原因,也是为什么要手动操作狗才能更好的追scv的原因。)
- 上一篇:仲裁与母舰之数据比较
- 下一篇:星际2现阶段不合理改动一览