游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1420|回复: 5

有个问题,请大家教教我……

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2005-7-23 19:43:00 | 显示全部楼层 |阅读模式
我一直在学游戏编程,现在有个问题:
游戏里有各种各样的对象,我希望这些对象在游戏运行时从动态连接库里读取的,这样就可以方便的进行扩展了。有什么好的方案吗?

我目前的想法是:
所有连接库中的所有的类都是从一个基类派生出来的,基类里定义了一系列的虚函数。运行期间都是通过基类指针来操作那些对象的。
连接库中,每个类都有一个函数用来创建这个类的实例,每个类还有一个函数,用来返回一个字符串,这个字符串是对类的说明,是给用户看的。
程序读取了所有连接库后,每个类都会有一个标识,根据这个标识可以获得这个类的说明信息,或者获得这个类的新的实例。
为了节省内存和保证速度,我觉得应该用二进制数据做类的标识,同时这些标识是在连接库载入时才确定的,也就是说,在地图文件里,是无法知道一个类的标识的。但是在写地图时又要通过给出类标识来在场景中放置对象……

我现在的问题是应该怎样生成和管理类标识,才能解决写地图的问题。

[em7]

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2005-7-24 08:55:00 | 显示全部楼层

Re:有个问题,请大家教教我……

建议你去看《深入浅出MFC》,里面详细说明了运行时类型识别的实现方法

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2005-7-24 14:09:00 | 显示全部楼层

Re:有个问题,请大家教教我……

这个……我不是要实现运行时类型识别啊……我要实现的就是让游戏能够使用细节未知的类,并且能够动态的从连接库中载入这些类……以此实现可扩展性……

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2005-7-25 09:15:00 | 显示全部楼层

Re:有个问题,请大家教教我……

你的意思是想说比如你的游戏只要一个“武器”类型的变量,而不管它运行的时候具体到底是倚天剑类还是屠龙刀类,或是其他的什么武器类,你只要用 武器.显示;武器.攻击 等等函数统一对待就好了是吗

5

主题

51

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2005-7-25 09:52:00 | 显示全部楼层

Re:有个问题,请大家教教我……

不就是动态类型么。
3DSMAX就是用的这个方法。你可以写插件,然后把DLL拷贝到他的目录下面,他就能识别了。
而且能过存储这些类。可以参考3DSMAX SDK。mfc的确实大了点。
关键就是对每个类都要有一个唯一的ID,然后在DLL里用另外一个辅助类来负责创建这个类。导出这个类的函数。然后调用这个函数创建类。
3DSMAX里面的ID,分成2部分,有一个部分来标至这个类是从哪个类继承的,这样就可以在运行时刻识别这个类实现了哪个接口了。属于哪个类别。所以类怎么实现接口程序原来是不知道的,但是知道实现了哪些接口。必须先定义好接口。
存储的时候把类的ID写到文件里面,调用SAVE接口函数,加载的时候读出ID,根据ID,调用辅助类的创建类的函数,创建这个类,然后调用这个类的LOAD函数。

36

主题

382

帖子

498

积分

中级会员

Rank: 3Rank: 3

积分
498
发表于 2005-7-25 11:22:00 | 显示全部楼层

Re:有个问题,请大家教教我……

就用4楼的方法好了,
比较简单。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 13:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表