【c++|SDL】开始使用之---demo
every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog
0. 前言
SDL 记录
1. hello word
#include<SDL2/SDL.h>SDL_Window* g_pWindow = 0;
SDL_Renderer* g_pRenderer = 0;int main(int argc, char* args[])
{// initialize SDLif(SDL_Init(SDL_INIT_EVERYTHING) >= 0){// if succeeded create our windowg_pWindow = SDL_CreateWindow("Chapter 1: Setting up SDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480,SDL_WINDOW_SHOWN);// if the window creation succeeded create our rendererif(g_pWindow != 0){g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0);}}else{return 1; // sdl could not initialize}// everything succeeded lets draw the window// set to black // This function expects Red, Green, Blue and// Alpha as color valuesSDL_SetRenderDrawColor(g_pRenderer, 0, 0, 0, 255);// clear the window to blackSDL_RenderClear(g_pRenderer);// show the windowSDL_RenderPresent(g_pRenderer);// set a delay before quittingSDL_Delay(5000);// clean up SDLSDL_Quit();return 0;
}
2. 整体框架

将其中一些代码封装到Game类中,main.cpp保持整洁
编译使用:
g++ main.cpp Game.cpp -o main -lSDL2
运行
./main
说明: 后续无特别说明与这里相同
main.cpp
#include "Game.h"
// our Game object
Game* g_game = 0;int main(int argc, char* argv[])
{g_game = new Game();// g_game->init("Chapter 1", 100, 100, 640, 480, 0);// g_game->init("Chapter 1", 100, 100, 640, 580,SDL_WINDOW_FULLSCREEN);g_game->init("Chapter 1", 100, 100, 640, 580,false);while(g_game->running()){g_game->handleEvents();g_game->update();g_game->render();}g_game->clean();return 0;
}
Game.h 声明类和函数
#ifndef __Game__
#define __Game__#include <SDL2/SDL.h>
class Game
{public:Game() {};~Game() {};// simply set the running variable to truebool init(const char* title, int xpos, int ypos,int width, int height, bool fullscreen);void render();void update();void handleEvents();void clean();// a function to access the private running variablebool running() { return m_bRunning; }
private:bool m_bRunning;SDL_Window* m_pWindow;SDL_Renderer* m_pRenderer;
};
#endif /* defined(__Game__) */
Game.cpp 实现类和函数
#include "Game.h"
#include <iostream>using namespace std;bool Game::init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen)
{ int flags = 0;if (fullscreen){flags = SDL_WINDOW_FULLSCREEN;}// attempt to initialize SDLif(SDL_Init(SDL_INIT_EVERYTHING) == 0){std::cout << "SDL init success\n";// init the windowm_pWindow = SDL_CreateWindow(title, xpos, ypos, width, height, flags);if(m_pWindow != 0) // window init success{std::cout << "window creation success\n";m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0);if(m_pRenderer != 0) // renderer init success{std::cout << "renderer creation success\n";SDL_SetRenderDrawColor(m_pRenderer,255,255,255,255);}else{std::cout << "renderer init fail\n";return false; // renderer init fail}}else{std::cout << "window init fail\n";return false; // window init fail}}else{std::cout << "SDL init fail\n";return false; // SDL init fail}std::cout << "init success\n";m_bRunning = true; // everything inited successfully, start the main loopreturn true;
}void Game::render()
{SDL_RenderClear(m_pRenderer); // clear the renderer to the draw colorSDL_RenderPresent(m_pRenderer); // draw to the screen
}void Game::handleEvents()
{SDL_Event event;if(SDL_PollEvent(&event)){switch (event.type){case SDL_QUIT:m_bRunning = false;break;default:break;}}
}void Game::clean()
{std::cout << "cleaning game\n";SDL_DestroyWindow(m_pWindow);SDL_DestroyRenderer(m_pRenderer);SDL_Quit();
}void Game::update()
{}
相关文章:
【c++|SDL】开始使用之---demo
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 SDL 记录 1. hello word #include<SDL2/SDL.h>SDL_Window* g_pWindow 0; SDL_Renderer* g_pRenderer 0;int main(int argc, char* args[]) {//…...
leetcode:有效的括号
题目描述 题目链接:20. 有效的括号 - 力扣(LeetCode) 题目分析 题目给了我们三种括号:()、{ }、[ ] 这里的匹配包括:顺序匹配和数量匹配 最优的思路就是用栈来解决: 括号依次入栈…...
使用STM32微控制器实现光电传感器的接口和数据处理
光电传感器在许多领域中被广泛应用,例如工业自动化、智能家居等。本文将介绍如何使用STM32微控制器实现光电传感器的接口和数据处理的方案,包括硬件设计、引脚配置、数据采集、滤波和阈值判断等关键步骤,并给出相应的代码示例。 一、引言 光…...
ELK企业级日志分析平台——kibana数据可视化
部署 新建虚拟机server5,部署kibana [rootelk5 ~]# rpm -ivh kibana-7.6.1-x86_64.rpm [rootelk5 ~]# cd /etc/kibana/[rootelk5 kibana]# vim kibana.ymlserver.host: "0.0.0.0"elasticsearch.hosts: ["http://192.168.56.11:9200"]i18n.local…...
Shell条件变量练习
1.算数运算命令有哪几种? (1) "(( ))"用于整数运算的常用运算符,效率很高 [rootshell scripts]# echo $((24*5**2/8)) #(( ))2452814 14 (2) "$[ ] "用于整数运算 [rootshell scripts]# echo $[24*5**2/8] #[ ]也可以运…...
【PHP】MySQL简介与MySQLi函数(含PHP与MySQL交互)
文章目录 一、MySQL简介二、MySQLi函数1. 开启mysqli扩展:2. PHP MySQLi扩展的常用函数 三、PHP与MySQL交互0. 准备1. 创建连接(mysqli_connect() )连接mysql语法 2. 选择数据库(mysqli_select_db())3. 在php中操作数据…...
vscode在Windows上安装插件提示错误xhr failed
问题描述: 在Windows下,在vscode里搜索扩展时发现无法搜索,报如下错:”Error while fetching extensions. XHR failed“。 问题定位: 在vscode界面下键入ctrlshiftp, 然后输入:Developer: T…...
SHAP(一):具有 Shapley 值的可解释 AI 简介
SHAP(一):具有 Shapley 值的可解释 AI 简介 这是用 Shapley 值解释机器学习模型的介绍。 沙普利值是合作博弈论中广泛使用的方法,具有理想的特性。 本教程旨在帮助您深入了解如何计算和解释基于 Shapley 的机器学习模型解释。 我…...
C++数据结构:图
目录 一. 图的基本概念 二. 图的存储结构 2.1 邻接矩阵 2.2 邻接表 三. 图的遍历 3.1 广度优先遍历 3.2 深度优先遍历 四. 最小生成树 4.1 最小生成树获取策略 4.2 Kruskal算法 4.3 Prim算法 五. 最短路径问题 5.1 Dijkstra算法 5.2 Bellman-Ford算法 5.3 Floyd-…...
「C++」红黑树的插入(手撕红黑树系列)
💻文章目录 📄前言红黑树概念红黑树的结构红黑树节点的定义红黑树的定义红黑树的调整 红黑树的迭代器迭代器的声明operator( )opeartor--( ) 完整代码 📓总结 📄前言 作为一名程序员相信你一定有所听闻红黑树的大名,像…...
2023年生肖在不同时间段的运势预测
随着信息技术的飞速发展,API已经成为了数据获取和交互的重要途径。很多网站和APP都在运用API来获取数据。今天我们来介绍一个十分有趣的API——《十二生肖运势预测API》,通过这个API,我们可以获取到每个生肖在不同时间段的运势预测࿰…...
ERRO报错
无法下载nginx 如下解决: 查看是否有epel 源 安装epel源 安装第三方 yum -y install epel-release.noarch NGINX端口被占用 解决: 编译安装的NGINX配置文件在/usr/local/ngin/conf 修改端口...
shiyan
import javax.xml.transform.Result; import java.util.Arrays; public class ParseText {//需要统计的字符串为private String text"Abstract-This paper presents an overview";private Result[] res;private int count;public ParseText(){resnew Result[100];cou…...
深度学习黎明时期的LeNet:揭开卷积神经网络的序幕
在深度学习的历史长河中,Yann LeCun 的 LeNet 是一个里程碑式的研究成果,它为后来的卷积神经网络(Convolutional Neural Networks,CNN)的发展奠定了基础。LeNet 的诞生标志着深度学习黎明时期的到来,为人工…...
跨越威胁的传说:揭秘Web安全的七大恶魔
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
【SpringCloud系列】@FeignClient微服务轻舞者
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(一)
一、SQL的基本结构 2.1 SQL语句的组成要素 SQL语句的组成要素 关键字(Keywords): 定义:SQL语句的基本操作命令,表示要执行的动作。例子:SELECT、INSERT、UPDATE、DELETE等。 标识符(Identifiers…...
使用oxylabs代理国外ip请求openai接口报错记录
报错提示: curl: (35) TCP connection reset by peer curl: (56) Recv failure: Connection reset by peer 这些报错都是因为curl版本过低(我的版本是curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2…...
搜索引擎语法
演示自定的Google hacking语法,解释含意以及在渗透过程中的作用 Google hacking site:限制搜索范围为某一网站,例如:site:baidu.com ,可以搜索baidu.com 的一些子域名。 inurl:限制关键字出现在网址的某…...
@ResponseBody详解
ResponseBody() 作用: responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。 位置: ResponseBody是作用在方法上的&…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
