再谈 (SanTa)的 WIN95游戏编程疑问
关于游戏多线程编程。我先举两个例子。第一个就是Microsoft的帝国时代,第一代他就开了一个线程,所以如果造人多时,最先表现的是鼠标有滞后感。所以我觉得游戏要有2-3个线程,一个管显示的,一个管计算的(还可在开一个管用户输入的),但有一点线程之间的互斥区做好。否则你的游戏还不如就一个线程呢,还有它在一代时管理好象都不用链表。如果用了。为什么一个兵工厂才能生产一个兵呢?(愚蠢)直到二代才支持可生产多个兵,但总人数还有限制。但这也有它的好处,第一如果可有无数兵的话(用户的内存足够的话),就要用到链表,这样生产出一个兵的话,就加一个链表元素,死一个兵时就删除一个元素,但我们要考虑到用户玩游戏可能时间很长,那样的话,链表经常动态分配内存时就会造成内存的碎片话。所以,你要有一套很好的管理内存的API(当然是自己编了,如果你全部信仰Microsoft的话,你的游戏不会有发展的),天子传奇就是个例子,玩一会游戏就会因支付不起内存而崩溃。
还有个多线程的例子就是工人物语了。他好像开了6-7个线程,一个管画面,一个管用户输入,一个管兵的,一个管建造房屋,一个管。。(数不清了),不过我也挺羡慕他们的,这么多线程互斥区这么管理的(太天才了吧)。
关于开多线程的例子,你还可以比较一下法老王(速度不受影响)和凯萨大帝(到后来明显有滞后感)。
我在随口谈谈关于,路径问题。我们游戏中的精灵类中有封装一个路径搜索类(比如:A*算法,即Graph-search算法的扩展)。它生成一个有项树(最短路径算法)。这会对你有很大帮助的。这样每个精灵就都会好好走路了。大多数游戏都用了这个算法。
关于消息的轮换机制。你要优化就行了。比如:我们具法老王这个游戏的例子,(你学过操作系统吧,看看它是怎么轮换线程的),在法老王中,你可以把兵的优先调成最高,农民其次。。。。在如小麦生长动画的优先级调成最低。这样。在消息轮换不过来时(即:你不能保证25帧/秒。实际游戏要比这个值高)。在这种情况下。你还管小麦生长不生长干什么。(玩家不会那么细致吧)。等我们的轮换机制比较悠闲了,在生长一下小麦
不就行了吗???还有用户看不到的,地方就不用那么细致了(他又看不到)。这样,我们的游戏差不多都是很简单的数操作。在加上玩家告速的CPU,我们的游戏想慢还不容易呢
最后,一句话。你最好学学Intel MMX技术,它在处理你游戏的alpha混合时,和图像剪贴,处理,拷贝等等时会快许多倍。(到时候你就要想了。我的游戏怎么让它慢些呢?开玩笑的)
我当时学写游戏时,先狂玩了20多种不同类型的游戏(太贪玩了,有半年多吧),但是我总结了很多经验,上边我也说了一些)。如果你框架打好了。编程就不是问题了。好好干吧。记着你的游戏编出来了,先寄我个demo版什么的。
如果,还有什么问题。我们可以继续探讨。我的游戏还用了一些其他技术。比如:敌人的AI算法。我是看了Basic解释程序后,才编的(不过还是挺弱的),你可多学学脚本语言
(这些只是我的片面之言,但我觉得对大家是有用的,如果你有更好的想法可以和我联系,我们继续探讨。但请不要用语言攻击我。谢谢大家看完我的拙念。)