重读C/C++笔记(一)

C语言,面向过程的编程。

     将待解决的问题直接拆解成现有的数据类型和逻辑步骤。是从计算机的角度去看待和考虑相应的问题的。

 

C++,面向对象的编程。

     是在问题空间思考和解决问题。先将待处理的问题,按实际的情况拆解为不同的类和对象,在类对象之内再分解成计算机现有的数据类型和逻辑步骤。类与类之间通过消息来相互驱动,类本身在消息驱动下,会从一种状态转换为另一种状态。有些类的状态及转换比较容易把握,有些则比较难。

 

类之间的静态关系最基本的有两种:

1、组合关系composition(或称聚合关系aggregation)(has-a关系)

     带菱形的箭头表拥有者

 

2、继成关系

     带空心箭头表基类

 

/

 

游戏编程中,如果只是简单地把对个体的处理,按一般的逻辑顺序(接受输入,处理移动碰撞,渲染场景)放到帧循环中。认为应该完全依赖帧循环来处理,那么还是用的面向过程的方法在思考和处理问题。

实际上应该首先确定几个实时监测类的对象(比如玩家的输入监测,玩家所操控的Role的当前的部分运动状态的监测),由帧循环来驱动。然后再由这这几个实时监测类对象向其他类发消息驱动。然后再以多米诺骨牌的方式来一级级地驱动,整个程序逻辑就起来了。

 

另外,AI的生成,Role在场景中的当前空间位置的计算等等,也都要放到帧循环中加以执行。但它们不属于实时监测者对象。它们应该称作需要实时更新的内容。

 

其实实际监测类对象和实时更新内容的对象,不应该看作帧循环中的逻辑过程。而应该看作是对时间消息的响应。只是在诸多需要时间消息驱动的对象中,在响应时间消息上有一定的先后而已。

 

需要注意的是,在现实生活中的所谓实时性是“连续的”而非“离散的”。而程序中,做不到,因为一般应用程序的最小时间单位就是“帧”。为了在程序中也能模拟连续的时间,需要在每次帧循环到来时,都做相应的流逝时间的计算。

 

总之,应该彻底地从面向过程的思维方式中转变过来,用“对象+状态+消息”的思维方法来分析问题和解决问题。哪怕对游戏这种实时性要求这么高的程序而言,也不例外。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值