我爱代码 - 专业游戏安全与逆向论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3456|回复: 0

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

[复制链接]

2381

主题

53

回帖

9145

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9145
QQ
发表于 2017-12-19 09:19:13 | 显示全部楼层 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

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


试验一://将素材包中的animate.bmp复制到工程目录的assets文件夹中
//Game.cpp中,修改装载图片的代码:
  1. //装入动作系列图片,形成绘制纹理
  2. SDL_Surface* pTempSurface = SDL_LoadBMP("assets/animate.bmp");
复制代码
//修改源和目的矩形值的定义:
  1. //本例中不再查询图片的高宽,而是指定单帧的高宽
  2. //SDL_QueryTexture(m_pTexture, NULL, NULL, &m_srcRect.w, &m_srcRect.h);
  3. m_srcRect.w = 128;   //指定单帧的高宽
  4. m_srcRect.h = 82;
  5. m_destRect.x = m_srcRect.x = 0; //赋值destRect
  6. m_destRect.y = m_srcRect.y = 0;
  7. m_destRect.w = m_srcRect.w;
  8. m_destRect.h = m_srcRect.h;
复制代码
//检查render()中的纹理复制函数是否正确
  1.     //绘制纹理对象
  2.     SDL_RenderCopy(m_pRenderer, m_pTexture, &m_srcRect, &m_destRect);
  3.     //SDL_RenderCopy(m_pRenderer, m_pTexture, 0, 0);
复制代码
测试运行:目前只显示文件中第一帧的画面
试验二:在update()中添加代码,用来计算在不同时间,应该显示出来的帧:
//Game.cpp中的update()
  1. void Game::update()
  2. {
  3.     //利用GetTicks返回已消逝的毫秒数,对6取模,因为有6帧
  4.     //得到的帧数再乘128,这是每帧的宽
  5.     m_srcRect.x = 128 * int(((SDL_GetTicks() / 100) % 6));
  6. }
复制代码
测试运行:可以正常产生动画效果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|我爱代码 - 专业游戏安全与逆向论坛 ( 陇ICP备17000105号-1 )

GMT+8, 2025-2-24 05:53 , Processed in 0.058990 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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