当前位置: 首页 > news >正文

【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:有效的括号

题目描述 题目链接&#xff1a;20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目给了我们三种括号&#xff1a;&#xff08;&#xff09;、{ }、[ ] 这里的匹配包括&#xff1a;顺序匹配和数量匹配 最优的思路就是用栈来解决&#xff1a; 括号依次入栈…...

使用STM32微控制器实现光电传感器的接口和数据处理

光电传感器在许多领域中被广泛应用&#xff0c;例如工业自动化、智能家居等。本文将介绍如何使用STM32微控制器实现光电传感器的接口和数据处理的方案&#xff0c;包括硬件设计、引脚配置、数据采集、滤波和阈值判断等关键步骤&#xff0c;并给出相应的代码示例。 一、引言 光…...

ELK企业级日志分析平台——kibana数据可视化

部署 新建虚拟机server5&#xff0c;部署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.算数运算命令有哪几种&#xff1f; (1) "(( ))"用于整数运算的常用运算符&#xff0c;效率很高 [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扩展&#xff1a;2. PHP MySQLi扩展的常用函数 三、PHP与MySQL交互0. 准备1. 创建连接&#xff08;mysqli_connect() &#xff09;连接mysql语法 2. 选择数据库&#xff08;mysqli_select_db()&#xff09;3. 在php中操作数据…...

vscode在Windows上安装插件提示错误xhr failed

问题描述&#xff1a; 在Windows下&#xff0c;在vscode里搜索扩展时发现无法搜索&#xff0c;报如下错&#xff1a;”Error while fetching extensions. XHR failed“。 问题定位&#xff1a; 在vscode界面下键入ctrlshiftp&#xff0c; 然后输入&#xff1a;Developer: T…...

SHAP(一):具有 Shapley 值的可解释 AI 简介

SHAP&#xff08;一&#xff09;&#xff1a;具有 Shapley 值的可解释 AI 简介 这是用 Shapley 值解释机器学习模型的介绍。 沙普利值是合作博弈论中广泛使用的方法&#xff0c;具有理想的特性。 本教程旨在帮助您深入了解如何计算和解释基于 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++」红黑树的插入(手撕红黑树系列)

&#x1f4bb;文章目录 &#x1f4c4;前言红黑树概念红黑树的结构红黑树节点的定义红黑树的定义红黑树的调整 红黑树的迭代器迭代器的声明operator( )opeartor--( ) 完整代码 &#x1f4d3;总结 &#x1f4c4;前言 作为一名程序员相信你一定有所听闻红黑树的大名&#xff0c;像…...

2023年生肖在不同时间段的运势预测

随着信息技术的飞速发展&#xff0c;API已经成为了数据获取和交互的重要途径。很多网站和APP都在运用API来获取数据。今天我们来介绍一个十分有趣的API——《十二生肖运势预测API》&#xff0c;通过这个API&#xff0c;我们可以获取到每个生肖在不同时间段的运势预测&#xff0…...

ERRO报错

无法下载nginx 如下解决&#xff1a; 查看是否有epel 源 安装epel源 安装第三方 yum -y install epel-release.noarch NGINX端口被占用 解决&#xff1a; 编译安装的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:揭开卷积神经网络的序幕

在深度学习的历史长河中&#xff0c;Yann LeCun 的 LeNet 是一个里程碑式的研究成果&#xff0c;它为后来的卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;的发展奠定了基础。LeNet 的诞生标志着深度学习黎明时期的到来&#xff0c;为人工…...

跨越威胁的传说:揭秘Web安全的七大恶魔

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

【SpringCloud系列】@FeignClient微服务轻舞者

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(一)

一、SQL的基本结构 2.1 SQL语句的组成要素 SQL语句的组成要素 关键字&#xff08;Keywords&#xff09;: 定义&#xff1a;SQL语句的基本操作命令&#xff0c;表示要执行的动作。例子&#xff1a;SELECT、INSERT、UPDATE、DELETE等。 标识符&#xff08;Identifiers&#xf…...

使用oxylabs代理国外ip请求openai接口报错记录

报错提示&#xff1a; curl: (35) TCP connection reset by peer curl: (56) Recv failure: Connection reset by peer 这些报错都是因为curl版本过低&#xff08;我的版本是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语法&#xff0c;解释含意以及在渗透过程中的作用 Google hacking site&#xff1a;限制搜索范围为某一网站&#xff0c;例如&#xff1a;site:baidu.com &#xff0c;可以搜索baidu.com 的一些子域名。 inurl&#xff1a;限制关键字出现在网址的某…...

@ResponseBody详解

ResponseBody() 作用&#xff1a; responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后&#xff0c;写入到response对象的body区&#xff0c;通常用来返回JSON数据或者是XML数据。 位置&#xff1a; ResponseBody是作用在方法上的&…...

告别DHT11!用STM32 HAL库驱动更高精度的AHT10温湿度传感器,附完整工程源码

从DHT11到AHT10&#xff1a;STM32 HAL库高精度温湿度测量实战指南 在智能家居和工业监测领域&#xff0c;温湿度数据的准确性直接影响着系统决策的质量。许多开发者最初接触的DHT11传感器虽然价格低廉&#xff0c;但其5%的湿度误差和2℃的温度偏差常常成为项目瓶颈。当你的智能…...

AgentCPM本地知识库增强方案:基于向量数据库的精准信息检索

AgentCPM本地知识库增强方案&#xff1a;基于向量数据库的精准信息检索 你有没有遇到过这样的情况&#xff1f;用大模型写一份行业分析报告&#xff0c;它给出的观点虽然通顺&#xff0c;但总感觉隔靴搔痒&#xff0c;缺乏对行业内部术语、历史数据和特定公司情况的深度洞察。…...

Python语法精要:变量、控制流与函数设计

# 003、Python语法精要&#xff1a;变量、控制流与函数设计---## 从一次深夜调试说起上周排查一个嵌入式日志解析脚本的 bug&#xff0c;问题出在一行看似简单的代码上&#xff1a;python device_list [] data parse_raw_packet() device_list.append(data) 看起来没问题对吧…...

Cursor报错user is unauthorized?3种快速解决方法(附官方推荐安装指南)

Cursor报错"user is unauthorized"的深度排查与解决方案 1. 理解"user is unauthorized"错误的本质 当你满怀期待地打开Cursor准备开始一天的编码工作&#xff0c;却突然看到"user is unauthorized"的红色错误提示时&#xff0c;那种感觉就像被…...

foc进阶篇3——对比PLL测速,为M法加低通正名

foc进阶篇3——对比PLL测速&#xff0c;为M法加低通正名相信大部分人在刚开始接触编码器时&#xff0c;对电机的转速获取基本都是使用M法测速加低通滤波的方式。但随着工作学习的不断深入&#xff0c;会逐渐听到有人说PLL测速更好&#xff0c;诸如什么“pll是观测器”、“pll的…...

SmolVLA入门指南:理解config.json中动作维度、图像尺寸等关键参数

SmolVLA入门指南&#xff1a;理解config.json中动作维度、图像尺寸等关键参数 1. 什么是SmolVLA&#xff1f; SmolVLA是一个专门为经济实惠的机器人技术设计的紧凑高效视觉-语言-动作模型。这个模型最大的特点就是在保持高性能的同时&#xff0c;大幅降低了计算资源需求&…...

国产化替代实战:HC32F460平台FreeModbus RTU从站移植与调试全记录

1. 为什么选择HC32F460进行国产化替代 最近几年&#xff0c;国产芯片的崛起给工程师们带来了新的选择。我在实际项目中接触到小华半导体的HC32F460系列芯片时&#xff0c;第一感觉就是它的性能参数相当亮眼。这款芯片采用ARM Cortex-M4内核&#xff0c;主频高达168MHz&#xff…...

Qwen2.5-Coder-1.5B新手指南:快速搭建代码生成环境

Qwen2.5-Coder-1.5B新手指南&#xff1a;快速搭建代码生成环境 你是不是经常在写代码时卡壳&#xff0c;或者需要快速生成一些重复性的代码片段&#xff1f;今天&#xff0c;我要给你介绍一个能帮你解决这些问题的好帮手——Qwen2.5-Coder-1.5B。这是一个专门为代码生成和编程…...

【MathType配置】2024年高效解决Word加载MathType报错问题:从MathPage.wll缺失到完美兼容

1. 2024年MathType与Word兼容性问题全景解析 刚写完论文准备插入公式&#xff0c;突然弹出"运行时错误53"的红色警告框&#xff0c;这场景是不是很熟悉&#xff1f;作为从Office 2003用到2024版的"老战士"&#xff0c;我见过太多人被MathType报错折磨得焦头…...

从零部署到实战:用YOLOv11+PyQt5打造你的工地安全帽检测桌面应用(附完整代码)

从零部署到实战&#xff1a;用YOLOv11PyQt5打造你的工地安全帽检测桌面应用 在建筑工地这样的高危环境中&#xff0c;安全帽佩戴检测是保障工人生命安全的重要环节。传统的人工巡检方式不仅效率低下&#xff0c;而且难以实现全天候监控。本文将带你从零开始&#xff0c;使用YOL…...