环境:SDL2 + VC++2015

下面的代码将打开background.bmp和image.bmp,将background平铺背景,将image作为前景呈现

 #include <iostream>
#include "SDL.h" //屏幕宽度
const int SCREEN_WIDTH = ;
const int SCREEN_HEIGHT = ; //全局窗口和渲染器
SDL_Window *window = nullptr;
SDL_Renderer *renderer = nullptr; //加载图片
SDL_Texture* LoadImage(std::string file)
{
SDL_Surface *loadedImage = nullptr;
SDL_Texture *texture = nullptr; loadedImage = SDL_LoadBMP(file.c_str());
if (loadedImage != nullptr)
{
texture = SDL_CreateTextureFromSurface(renderer, loadedImage);
SDL_FreeSurface(loadedImage);
}
else
std::cout << SDL_GetError() << std::endl;
return texture;
} //将表面应用到渲染器
void ApplySurface(int x, int y, SDL_Texture *tex, SDL_Renderer *rend)
{
SDL_Rect pos;
pos.x = x;
pos.y = y;
SDL_QueryTexture(tex, NULL, NULL, &pos.w, &pos.h);
SDL_RenderCopy(rend, tex, NULL, &pos);
} int main(int argc, char** argv)
{
//初始化SDL
if (SDL_Init(SDL_INIT_EVERYTHING) == -)
{
std::cout << SDL_GetError() << std::endl;
return ;
} //创建窗口
window = SDL_CreateWindow("Lesson 2",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == nullptr)
{
std::cout << SDL_GetError() << std::endl;
return ;
} //创建渲染器
renderer = SDL_CreateRenderer(window, -,
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (renderer == nullptr)
{
std::cout << SDL_GetError() << std::endl;
return ;
} //创建背景和前景纹理
SDL_Texture *background = nullptr, *image = nullptr;
background = LoadImage("background.bmp");
image = LoadImage("image.bmp");
if (background == nullptr || image == nullptr)
return ; //清空渲染器
SDL_RenderClear(renderer); //在渲染器内平铺背景
int bW, bH;
SDL_QueryTexture(background, NULL, NULL, &bW, &bH);
ApplySurface(, , background, renderer);
ApplySurface(bW, , background, renderer);
ApplySurface(, bH, background, renderer);
ApplySurface(bW, bH, background, renderer); //在渲染器中央放置前景
int iW, iH;
SDL_QueryTexture(image, NULL, NULL, &iW, &iH);
int x = SCREEN_WIDTH / - iW / ;
int y = SCREEN_HEIGHT / - iH / ;
ApplySurface(x, y, image, renderer); //呈现渲染器
SDL_RenderPresent(renderer);
SDL_Delay(); //释放资源
SDL_DestroyTexture(background);
SDL_DestroyTexture(image);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window); SDL_Quit(); return ;
}

彩蛋:

如果窗口变成了1920*1080呢?上面的平铺方法就不够灵活了。试下:

     int bW, bH;
SDL_QueryTexture(background, NULL, NULL, &bW, &bH);
for (int y = ; y <= SCREEN_HEIGHT; y += bH)
for (int x = ; x <= SCREEN_WIDTH; x += bW)
ApplySurface(x, y, background, renderer);

最新文章

  1. shell if 浮点数比较
  2. 1.JAVA中使用JNI调用C++代码学习笔记
  3. Extjs4.0以上版本智能提示的方法
  4. 支持断线重连、永久watcher、递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端
  5. hdu 4401 Battery
  6. Wix 安装部署教程(十三) -- 多语言安装包
  7. 转:C++ Boost/tr1 Regex(正则表达式)快速指南
  8. The Material Sourcing Process Failed To Create Picking Suggestions in INVTOTRX (文档 ID 2003806.1)
  9. POJ 1651 Multiplication PuzzleDP方法:
  10. 自己写的简单的jQuery分页控件
  11. linux命名管道通信过程
  12. 原生js实例对象方法
  13. Windows7下PHP5.6.19+Apache2.4.18+MySql5.7环境配置
  14. Vue学习Day002
  15. java 英文单词拼写纠正框架(Word Checker)
  16. 编写高质量代码改善java程序的151个建议——[110-117]异常及Web项目中异常处理
  17. vue 二三倍图适配,1像素边框
  18. 单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区
  19. Redis Desktop Manager连接Redis
  20. WeakReference与SoftReference

热门文章

  1. SystemTap 静态探针安装包
  2. PythonCookbook读书笔记
  3. C#-訪问轰炸机,新建进程,结束进程...(ConsoleApp)---ShinePans
  4. IronPython 与C#交互
  5. win10 UWP 申请微软开发人员
  6. MySQL Community Server 5.6和MySQL Installer 5.6
  7. POJ - 1062 昂贵的聘礼(最短路Dijkstra)
  8. eImage(仅两行代码实现输出从数据库中查询到的二进制字段)标签
  9. 【DataStructure】Description and Introduction of Tree
  10. Codeforces 558C Amr and Chemistry