|
《Windows游戏编程大师技巧》(第二版)第11章(18) qmemset(&buffer, 25, 1000); 这样从buffer的起始地址开始,1000个quads被逐一填充为值25。 注意 如果你使用的不是Microsoft VC++, 你应查看一下你所用编译器的帮助,弄明白内联汇编器所需的语法格式。在大多数情况下,它们之间只不过有些下划线不同而已。 制作演示 假如你已完成游戏程序的编写,这时需要一个演示模式(Demo Mode)。制作演示主要有两种方法:你可以自己玩这个游戏并记录你的动作,或者你可以使用一个人工智能玩家。记录自己的游戏玩法是最常见的选择。因为编写一个像真人一样过关斩将的人工智能玩家是非常困难的,而且为了给潜在的买家留下良好的印象,就必然要求人工智能玩家以非常酷的方式玩游戏,要做到这一点也是很困难的。让我们扼要地看一下这两种方法是怎样实现的。 预先记录的演示 为了记录一段演示,基本上,你要记录每一循环的各种输入设备的状态,将数据写入文件,然后将该记录文件作为游戏引擎的输入来制作演示。看一看图11-13中的A及B便一目了然了。这一方法的思路是游戏本身并不知道输入是来自键盘(输入设备)还是文件,因此这种演示只是简单地回放游戏。 图11-13:演示回放 为使其工作,你必须有一个确定性(Deterministic)的游戏策略:如果你再次玩这个游戏并且玩法相同,那么游戏人物也将做同样的事情。这意味着如同记录输入设备一样,你必须记录初始的随机数种子,以便将游戏记录的开始状态也像输入一样被记录下来。这样做确保了游戏演示将按照你记录时同样的状态播放。 记录一个游戏的最好办法并不是以一定的时间间隔对输入进行采样,而是每帧都对输入进行采样。这样一来,这个演示不论计算机快慢,回放时均能与游戏保持同步。我通常的做法是将所有的输入设备并入到一个记录中,一帧一个记录,然后将这些记录做成一个文件。我将播放演示程序的状态信息或随机数放在文件的开头,以便于载回这些数据。因此,这个回放文件如下所示: Initial State Information Frame 1: Input Values Frame 2: Input Values Frame 3: Input Values . . Frame N: Input Values 初始状态信息 第1帧:输入值 第2帧:输入值 第3帧:输入值 . . 第N帧:输入值 一旦你有了这个文件,只要简单地将游戏复位后从头播放即可。随后读入文件,仿佛这些数据是从输入设备输入的一样。游戏自身并不知道这点差别! 警告 The single worst mistake that you can make is sampling the input at the wrong time when you're writing out records. You should make absolutely certain that the input you sample and record is the actual input that the game uses for that frame. A common mistake that newbies make is to sample the input for the demo mode at a point in the event loop before or after the normal input is read. Hence, they're sampling different data! It's possible that the player might have the fire button down in one part of the event loop and not in another, so you must sample at the same point you read the input for the game normally. 你可能犯的最糟糕的一个错误是:在写出记录时,在不当的时机对输入进行了采样。事实上,应当务必确保采样和记录的输入是游戏相应的帧所实际使用的输入。一个新手常犯的错误是这样的,为游戏演示所进行的采样超前或落后于游戏的正确输入时刻。因此,所采样到的数据是不同的数据!其可能造成的结果是游戏玩家在游戏事件循环的某一部分按下了发射键,而在另一部分却松开了它。所以必须在同一处进行采样与读入输入。
|