SDL Game Development-第2章-2.剪裁式显示BMP

[复制链接]

该用户从未签到

2380

主题

2433

帖子

9139

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x
在最终的render()中,将纹理拷贝到显存中时,source和destination矩形框的改变,可以实现BMP的剪裁式显示
原型:
SDL_RenderCopy(渲染器指针,纹理指针,源图矩形指针,目标位置矩形指针);

//尝试之前,修改背景色为纯黑:
  1.                 //设置当前渲染色,rgba,红绿蓝透明四通道
  2.                 SDL_SetRenderDrawColor(m_pRenderer, 0x0, 0x0, 0x0, 0xFF);
复制代码
//尝试一:
//如果在查询纹理代码之后,加上为源矩形框的高宽赋值代码:
  1. m_srcRect.w = 50;
  2. m_srcRect.h = 50;
  3. //那么显示到屏幕上的图片,将只有0~50的范围
复制代码


//尝试二:
//修改目的矩形值
  1. m_destRect.x = 100;
  2. m_destRect.y = 100;
  3. //这将改变图片在屏幕上的显示位置
复制代码



//尝试三:
//在以上的基础上,再次修改源的起点值
  1. m_srcRect.x = 50;
  2. m_srcRect.y = 50;
复制代码




//尝试四:
//如果传入RenderCopy的源和目的值都为NULL,则源图会将整个屏幕占满
//修改render()中的代码:
SDL_RenderCopy(m_pRenderer, m_pTexture, 0, 0);

最后:完整的代码片段(Game.cpp中)
  1. //然后设置需要绘制到屏幕的位置和高宽。以下代码是使用原图片高宽
  2. m_srcRect.w = 50;   //尝试一:改变源图需要显示的高宽
  3. m_srcRect.h = 50;
  4. m_destRect.x = m_srcRect.x = 0;
  5. m_destRect.y = m_srcRect.y = 0;
  6. m_destRect.w = m_srcRect.w;
  7. m_destRect.h = m_srcRect.h;
  8. m_destRect.x = 100;
  9. m_destRect.y = 100;
  10. m_srcRect.x = 50;
  11. m_srcRect.y = 50;

  12.     std::cout << "init success\n";
  13.     m_bRunning = true;  //所有初始都成功,可以开始主循环了
  14.     return true;
  15. }

  16. void Game::render()
  17. {
  18.     SDL_RenderClear(m_pRenderer);   //清屏
  19.     //绘制纹理对象
  20.     //SDL_RenderCopy(m_pRenderer, m_pTexture, &m_srcRect, &m_destRect);
  21.     SDL_RenderCopy(m_pRenderer, m_pTexture, 0, 0);
  22.     SDL_RenderPresent(m_pRenderer); //双缓冲翻转,新内容显示到屏幕上
  23. }
复制代码


分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

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

本版积分规则

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