游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1260|回复: 1

游戏制作心得(二)

[复制链接]

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2004-12-14 17:29:00 | 显示全部楼层 |阅读模式
[原] 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( );
}

好今天又讲了一些,不知道对不对,大家交流

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
 楼主| 发表于 2004-12-14 17:32:00 | 显示全部楼层

Re:游戏制作心得(二)

不好意思,上面有个bug,应该如下

    void Render( )
    {
        if ( m_tmObj.GetDiffTick( ) > m_dblDelay ) // 到了换帧的时候
        {
            if ( m_nCurFrameIndex >= m_nFrameCount-1 ) m_nCurFrameIndex = 0;
            else m_nCurFrameIndex++;     
        }
        
        m_vecImgs[m_nCurFrameIndex]->Render( ... ); // 播放当前帧
    }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 16:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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