SDL Game Development-第2章-1.BMP的原样显示

[复制链接]

该用户从未签到

2380

主题

2433

帖子

9139

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9139
QQ
跳转到指定楼层
楼主
发表于 2017-12-19 09:21:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
第二章  Drawing in SDL介绍的内容:
1.SDL绘制基础
2.源和目的矩形区域
3.装入和显示纹理
4.使用SDL_image扩展

注:在SDL1.2版本中,使用SDL_Surface表面结构,它使用的是软渲染,没有使用GPU,速度不够快。
SDL2.0中使用SDL_Texture,可以使用硬件加速

图片素材下载地址:http://www.widgetworx.com/spritelib.html

注:再还没有引入SDL_image库之前,图片素材使用.bmp格式

一、创建一个SDL纹理//在Game.h中,添加一个SDL_Texture对象的指针,作为成员变量。还有源框和目的框位置变量
  1. SDL_Texture* m_pTexture;
  2. SDL_Rect m_srcRect;
  3. SDL_Rect m_destRect;
复制代码
//在Game.cpp的init中装入纹理
1.在源代码目录中,创建一个assets的目录,用来保存素材。如图,随便找一个图片,转为bmp格式。200*132大小
  1. //装入图片,形成绘制纹理
  2. SDL_Surface* pTempSurface = SDL_LoadBMP("assets/show2.BMP");
  3. //最好是检查图片是否存在,或装载有无错误
  4. if(pTempSurface == 0)
  5. {
  6.     std::cout << "BMP load fail\n";
  7.     return false;   //图片装载失败
  8. }
  9. //转换为显存中的纹理
  10. m_pTexture = SDL_CreateTextureFromSurface(m_pRenderer, pTempSurface);
  11. //释放临时表面
  12. SDL_FreeSurface(pTempSurface);
  13. //查询图片的高宽,为绘制作准备
  14. SDL_QueryTexture(m_pTexture, NULL, NULL, &m_srcRect.w, &m_srcRect.h);
  15. //然后设置需要绘制到屏幕的位置和高宽。以下代码是使用原图片高宽
  16. m_destRect.x = m_srcRect.x = 0;
  17. m_destRect.y = m_srcRect.y = 0;
  18. m_destRect.w = m_srcRect.w;
  19. m_destRect.h = m_srcRect.h;

  20.     std::cout << "init success\n";
  21.     m_bRunning = true;  //所有初始都成功,可以开始主循环了
  22.     return true;
复制代码
3.在render()中,添加需要渲染的BMP
  1. void Game::render()
  2. {
  3.     SDL_RenderClear(m_pRenderer);   //清屏
  4.     //绘制纹理对象
  5.     SDL_RenderCopy(m_pRenderer, m_pTexture, &m_srcRect, &m_destRect);
  6.     SDL_RenderPresent(m_pRenderer); //双缓冲翻转,新内容显示到屏幕上
  7. }
复制代码

编译运行:结果如图

2.利用SDL_LoadBMP()装入图片。但它返回的是SDL_Surface*表面指针,还需要用SDL_CreateTextureFromSurface()转换一下
分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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