|
想要查看内容赶紧注册登陆吧!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
原理:将角色动画的一系列画面保存到一幅图中,然后计算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));
- }
复制代码 测试运行:可以正常产生动画效果
|
|