在最终的render()中,将纹理拷贝到显存中时,source和destination矩形框的改变,可以实现BMP的剪裁式显示
原型:
SDL_RenderCopy(渲染器指针,纹理指针,源图矩形指针,目标位置矩形指针);
//尝试之前,修改背景色为纯黑:
//尝试一:
//如果在查询纹理代码之后,加上为源矩形框的高宽赋值代码:
//尝试二:
//修改目的矩形值
//尝试三:
//在以上的基础上,再次修改源的起点值
//尝试四:
//如果传入RenderCopy的源和目的值都为NULL,则源图会将整个屏幕占满
//修改render()中的代码:
原型:
SDL_RenderCopy(渲染器指针,纹理指针,源图矩形指针,目标位置矩形指针);
//尝试之前,修改背景色为纯黑:
//设置当前渲染色,rgba,红绿蓝透明四通道
SDL_SetRenderDrawColor(m_pRenderer, 0x0, 0x0, 0x0, 0xFF);
//尝试一:
//如果在查询纹理代码之后,加上为源矩形框的高宽赋值代码:
m_srcRect.w = 50;
m_srcRect.h = 50;
//那么显示到屏幕上的图片,将只有0~50的范围
//修改目的矩形值
m_destRect.x = 100;
m_destRect.y = 100;
//这将改变图片在屏幕上的显示位置
//尝试三:
//在以上的基础上,再次修改源的起点值
m_srcRect.x = 50;
m_srcRect.y = 50;
//尝试四:
//如果传入RenderCopy的源和目的值都为NULL,则源图会将整个屏幕占满
//修改render()中的代码:
SDL_RenderCopy(m_pRenderer, m_pTexture, 0, 0);
最后:完整的代码片段(Game.cpp中)
//然后设置需要绘制到屏幕的位置和高宽。以下代码是使用原图片高宽
m_srcRect.w = 50; //尝试一:改变源图需要显示的高宽
m_srcRect.h = 50;
m_destRect.x = m_srcRect.x = 0;
m_destRect.y = m_srcRect.y = 0;
m_destRect.w = m_srcRect.w;
m_destRect.h = m_srcRect.h;
m_destRect.x = 100;
m_destRect.y = 100;
m_srcRect.x = 50;
m_srcRect.y = 50;
std::cout << "init success\n";
m_bRunning = true; //所有初始都成功,可以开始主循环了
return true;
}
void Game::render()
{
SDL_RenderClear(m_pRenderer); //清屏
//绘制纹理对象
//SDL_RenderCopy(m_pRenderer, m_pTexture, &m_srcRect, &m_destRect);
SDL_RenderCopy(m_pRenderer, m_pTexture, 0, 0);
SDL_RenderPresent(m_pRenderer); //双缓冲翻转,新内容显示到屏幕上
}