游戏中的资源管理部分的设计(C++语言描述)
在游戏里,我把资源分成了 texture(纹理),sprite(精灵),Animation(动画), sound(声音). 我们可以把这些资源看成一个个的类 ,那么这些资源具体指的是什么东东呢? 我来说明下:
1.texture: 可以理解成游戏中的图片对象.
2.sprite: 来处理游戏中图片的绘制的对象.
3.Animation:来处理游戏中动画播放的对象,它继承与sprite类.
4.sound:来处理游戏中声音播放的对象.
这四种资源类都继承一个基类CresObject 这个基类 把这四种资源类的相同的数据全部抽象出来,比如,id号,资源的类型. 写到这里大家可能会问为什么这四种资源类都需要ID号和类型?因为 接下来我需要把这些资源管理起来,创建一个管理类,并且把这些资源用一种数据结构保存起来,在这里我使用了STL里的vector,为什么要使用VECTOR呢?由于我做的是一款飞机小游戏,那么游戏中的资源一般不存在中间删除某个资源,要不就是全部删除,所以我就排除了使用list的想法,那么为什么不用map呢?这个我想VECTOR已经足够,使用MAP的话应该会更方便,更直观,因为MAP里的每个元素都是一一对应的,如果使用MAP 我们可以通过自己定义的资源名字,对应资源对象,查找的时候通过资源名字快速的找到资源的对象,这样就避免了vector便利去查找,而且还需要通过id和type的标示来判断,进行查找,这样一来MAP显然比VECTOR好,不过由于时间的原因我也不想做太多的修改,以后把自己写的再换成MAP来做.
这个管理类负责的工作是什么呢?
1.载入资源.
2.删除资源
3.获取资源.
那我们在载入资源和 获取资源的时候 就需要通过id号和类型 从保存资源的数据结构中查找我们想要的资源.这时候资源的基类里的id和类型变量就派上用场了.
下面我将给出具体实现的代码:
文件名: ResObject.h
1 #ifndef RESOBJECT_H
2 #define RESOBJECT_H
3 #include "GlobalData.h"
4 #include "Dx9App.h"
5
6 class CResObject
7 {
8 public:
9 CResObject(void);
10
11 ~CResObject(void);
12
13 UINT GetId()
14 {
15 return m_id;
16 }
17
18 UINT GetType()
19 {
20 return m_type;
21 }
22
23 protected:
24 //资源id号
25 UINT m_id;
26
27 //资源类型
28 UINT m_type;
29 };
30
31 #endif
32
文件名: ResObject.cpp
1 #include "ResObject.h"
2
3 CResObject::CResObject(void)
4 {
5 }
6
7 CResObject::~CResObject(void)
8 {
9 }
10
文件名:Animation.h
1 #ifndef ANIMATION_H
2 #define ANIMATION_H
3 #include "DxSprite.h"
4 #include "Dx9App.h"
5
6 class CAnimation:public CDxSprite
7 {
8 public:
9 CAnimation(UINT _id, CDxTexture *_tex,UINT _type, UINT _tx, UINT _ty, UINT _tw, UINT _th,
10 WORD _framemax, WORD _ationmax, WORD _playerspeed);
11
12 virtual ~CAnimation(void);
13
14 //逻辑更新
15 void UpData(float _time);
16
17 //绘制
18 virtual void Render(DFPOINT _pos);
19
20 virtual void Render(DFPOINT _pos,DOUBLE _Angle);
21
22 virtual void Render(DFPOINT _pos,FLOAT _x,FLOAT _y);
23
24 //播放下一帧
25 void NextFrame();
26
27 //设置帧数
28 void SetFrame(WORD _frame)
29 {
30 m_curframe = _frame;
31 }
32
33 //设置状态
34 void SetAtion(WORD _ation)
35 {
36 m_curation = _ation;
37 }
38
39 //设置是否开始播放
40 void SetPlay(bool _isbegin)
41 {
42 m_isplay = _isbegin;
43 }
44
45 //获取当前桢
46 WORD GetFrame() const
47 {
48 return m_curframe;
49 }
50
51 //获取当前状态
52 WORD GetAtion() const
53 {
54 return m_curation;
55 }
56
57 //获取是否播放
58 bool GetIsPlay() const
59 {
60 return m_isplay;
61 }
62 protected:
63 CAnimation(void);
64 private:
65 //每一状态的帧数的总量
66 WORD m_framemax;
67
68 //当前帧数
69 WORD m_curframe;
70
71 //状态的总量
72 WORD m_ationmax;
73
74 //当前状态
75 WORD m_curation;
76
77 //计数器
78 UINT m_timecount;
79
80 //播放的速度
81 WORD m_playerSpeed;
82
83 //是否播放
84 bool m_isplay;
85 };
86
87 #endif
文件名:Animation.cpp
1 #include "Animation.h"
2
3 CAnimation::CAnimation(void)
4 {
5 }
6
7 CAnimation::~CAnimation(void)
8 {
9 }
10
11 CAnimation::CAnimation(UINT _id, CDxTexture *_tex,UINT _type, UINT _tx, UINT _ty, UINT _tw, UINT _th,
12 WORD _framemax, WORD _ationmax, WORD _playerspeed)
13 :CDxSprite(_id,_tex,_type,_tx,_ty,_tw,_th)
14 {
15 m_framemax = _framemax;
16
17 m_ationmax = _ationmax;
18
19 m_curframe = 0;
20
21 m_curation = 0;
22
23 m_playerSpeed = _playerspeed;
24 }
25
26 void CAnimation::UpData(float _time)
 
补充:软件开发 , C++ ,