C语言,面向过程的编程。
将待解决的问题直接拆解成现有的数据类型和逻辑步骤。是从计算机的角度去看待和考虑相应的问题的。
C++,面向对象的编程。
是在问题空间思考和解决问题。先将待处理的问题,按实际的情况拆解为不同的类和对象,在类对象之内再分解成计算机现有的数据类型和逻辑步骤。类与类之间通过消息来相互驱动,类本身在消息驱动下,会从一种状态转换为另一种状态。有些类的状态及转换比较容易把握,有些则比较难。
类之间的静态关系最基本的有两种:
1、组合关系composition(或称聚合关系aggregation)(has-a关系)
带菱形的箭头表拥有者
2、继成关系
带空心箭头表基类
/
游戏编程中,如果只是简单地把对个体的处理,按一般的逻辑顺序(接受输入,处理移动碰撞,渲染场景)放到帧循环中。认为应该完全依赖帧循环来处理,那么还是用的面向过程的方法在思考和处理问题。
实际上应该首先确定几个实时监测类的对象(比如玩家的输入监测,玩家所操控的Role的当前的部分运动状态的监测),由帧循环来驱动。然后再由这这几个实时监测类对象向其他类发消息驱动。然后再以多米诺骨牌的方式来一级级地驱动,整个程序逻辑就起来了。
另外,AI的生成,Role在场景中的当前空间位置的计算等等,也都要放到帧循环中加以执行。但它们不属于实时监测者对象。它们应该称作需要实时更新的内容。
其实实际监测类对象和实时更新内容的对象,不应该看作帧循环中的逻辑过程。而应该看作是对时间消息的响应。只是在诸多需要时间消息驱动的对象中,在响应时间消息上有一定的先后而已。
需要注意的是,在现实生活中的所谓实时性是“连续的”而非“离散的”。而程序中,做不到,因为一般应用程序的最小时间单位就是“帧”。为了在程序中也能模拟连续的时间,需要在每次帧循环到来时,都做相应的流逝时间的计算。
总之,应该彻底地从面向过程的思维方式中转变过来,用“对象+状态+消息”的思维方法来分析问题和解决问题。哪怕对游戏这种实时性要求这么高的程序而言,也不例外。