|
|
[原] http://bbs.chaosstars.com/dispbbs.asp?boardid=61&id=243
上次说到了资源的管理,现在来说说具体的资源对象(随便讲讲)
资源有很多,最重要的就是图片,图片是游戏的血液,首先要对图片进行管理,同上一讲
http://data.gameres.com/message.asp?TopicID=19285
class CImgObj
{
...
void Render( LPVOID lpDevice, RECT& rcSrc, RECT& rcDes, UINT uColorKey, BYTE byAlpha ); // 渲染一张图片,可以根据自己需要来设置参数,这里定义了设备,原图范围,目标位置,关键色,Alpha等等
...
};
typedef CImgObj * CImgObjPtr;
class CCImg
{
};
这里只能说定义好了图片的仓库,如何根据需要进行组织然后渲染到屏幕上呢。那么我们就需要定义一些实体对象,比如动画,UI等等
动画
说到动画,我们不得不说另外一个很重要的对象:计时器。你可以使用各种手段来提高计时器的效率和精确度,这里我先不说,只说一下定义
class CTimerObj
{
protected:
double m_dblTick;
public:
CTimerObj( );
~CTimerObj( );
public:
void Reset( ); // 重置计数
double GetTick( ); // 绝对计数
double GetDiffTick( ); // 相对计数
};
class CAniObj
{
private:
CTimerObj m_tmObj;
vector<CImgObjPtr> m_vecImgs;
int m_nCurFrameIndex; // 当前帧索引
double m_dblDelay; // 帧时间间隔
public:
void Create( )
{
m_nCurFrameIndex = 0;
}
void Start( int nLoop = -1 ) // 播放次数,-1 循环播放
{
m_tmObj.Reset( );
}
void Stop( )
{
m_tmObj.Reset( );
}
void Reset( )
{
m_nCurFrameIndex = 0;
}
void Render( )
{
if ( m_tmObj.GetDiffTick( ) > m_dblDelay ) // 到了换帧的时候
{
if ( m_nCurFrameIndex >= m_nFrameCount ) m_nCurFrameIndex = 0;
else m_nCurFrameIndex++;
}
m_vecImgs[m_nCurFrameIndex]->Render( ... ); // 播放当前帧
}
...
};
动画也需要管理
class CCAni
{
};
这样动画就定义好了
用的时候也很方便
void Update( ) // 还记得这个函数吗? 那个简单的框架
{
CAniObjPtr p;
if ( KEYDOWN( VK_RIGHT ) )
{
p = CCAni::GetInst( )->Find( "角色向右走" );
p->Start( );
}
...
}
void Render( )
{
CAniObjPtr p;
p = CCAni::GetInst( )->Find( "角色向右走" );
p->Render( );
}
好今天又讲了一些,不知道对不对,大家交流 |
|