SDL Game Development-第2章-3.利用角色表产生动画

原理:将角色动画的一系列画面保存到一幅图中,然后计算srcRect源框的值,剪裁式地将单个角色按顺序显示屏幕上,就可以产生动画效果。



试验一:
//将素材包中的animate.bmp复制到工程目录的assets文件夹中
//Game.cpp中,修改装载图片的代码:
//装入动作系列图片,形成绘制纹理
SDL_Surface* pTempSurface = SDL_LoadBMP("assets/animate.bmp");

//修改源和目的矩形值的定义:
//本例中不再查询图片的高宽,而是指定单帧的高宽
//SDL_QueryTexture(m_pTexture, NULL, NULL, &m_srcRect.w, &m_srcRect.h);
m_srcRect.w = 128;   //指定单帧的高宽
m_srcRect.h = 82;
m_destRect.x = m_srcRect.x = 0; //赋值destRect
m_destRect.y = m_srcRect.y = 0;
m_destRect.w = m_srcRect.w;
m_destRect.h = m_srcRect.h;

//检查render()中的纹理复制函数是否正确
    //绘制纹理对象
    SDL_RenderCopy(m_pRenderer, m_pTexture, &m_srcRect, &m_destRect);
    //SDL_RenderCopy(m_pRenderer, m_pTexture, 0, 0);

测试运行:目前只显示文件中第一帧的画面

试验二:
在update()中添加代码,用来计算在不同时间,应该显示出来的帧:
//Game.cpp中的update()
void Game::update()
{
    //利用GetTicks返回已消逝的毫秒数,对6取模,因为有6帧
    //得到的帧数再乘128,这是每帧的宽
    m_srcRect.x = 128 * int(((SDL_GetTicks() / 100) % 6));
}

测试运行:可以正常产生动画效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值