由引擎接口自顶向下的设计引擎结构

从我的理解,一款引擎从功能上划分大致分为:基础系统,资源管理,io管理,内存管理,场景管理,材质管理,GUI,物理系统,渲染器,脚本接口层等,当我尝试将这些系统一个个的拼凑起来的时候,发现接口设计很费劲,就算把各个子系统之间的关系用图表示出来,也经常出现这样设计出来的接口却不是希望要的接口。

“自顶向下”的设计在这里就显得很对症,引擎的实际用户实际上是脚本程序员,因此根据用户的需要定制接口是个好方法。

比如:一个最简单的脚本demo是这样的:

1 --创建一个角色
2 player = CPlayer:new()
3 player:Load("aaaa.player")
4
5 --创建一把武器
6 weapon = CWeapon:new()
7 weapon:Load("aaaa.weapon")
8
9 --创建一个特效
10 effect = CEffect:new()
11 effect:Load("aaaa.effect")
12
13 --特效设置给武器
14 weapon:AddChild(effect)
15
16 --武器加到角色上
17 player:AddChild(weapon)
18
19 --创建一个场景
20 scene = sceneMgr:CreateScene("aaa.scene")
21 --角色加到场景中
22 scene:AddChild(player)
23
24 --角色跑路
25 player:Move(scrPoint, dstPoint, speed)

这里的CPlayer、CEffect、CWeapon之类的不一定是引擎导出类,也可以使脚本封装的。从这样一个脚本实例来看,就希望引擎的场景管理的节点树结构大致是个什么模样,也可以决定资源加载接口的大致模样。

以此类推,也可以先写一些脚本实例来推广到其他各个子系统,以此来制定各个子系统的对外接口。引擎对外的脚本接口确定之后,再依据各子系统之间的关系,确定各子系统的内部关联接口。

posted on 2011-04-10 12:03  konlil  阅读(551)  评论(1编辑  收藏  举报

导航