当前位置:编程学习 > C/C++ >>

游戏中的资源管理部分的设计(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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,