【SDL游戏编程入门第十六卷】输出中文SDL_ttf以及设置中文标题
一、前言
从本卷开始,代码做了一定的简化,去掉了不必要的封装,尽量每个模块以讲述功能为主,让示例更加浅显易懂
本卷介绍使用 SDL_ttf 输出中文,以及如何设置中文标题。
二、SDL_ttf 输出中文
本卷使用的中文字体是微软自带的黑体 simhei.ttf
// 【这里设置 utf-8 字符集】
#pragma execution_character_set("utf-8")
这个是关键,然后在加载字体时使用的函数也要更改
TTF_RenderUTF8_Solid
,当然还有 TTF_RenderUTF8_Blended
等等,这里使用 后者
// 加载字体
const char* text = "中文!";
TTF_Font* font = TTF_OpenFont("res/fonts/simhei.ttf", 28);
SDL_Surface* blendSurface = TTF_RenderUTF8_Blended(font, text, { 255, 255, 255, 255 }); // 文字是白色
SDL_Texture* blendTexture = SDL_CreateTextureFromSurface(renderer, blendSurface);
SDL_Rect blendRect = { 0, 0, blendSurface->w, blendSurface->h };
SDL_FreeSurface(blendSurface);
其他都是之前的内容,下面贴出代码
1. 代码示例
#include <iostream>
#include <SDL.h>
#include <SDL_ttf.h>#pragma comment(lib, "SDL2.lib")
#pragma comment(lib, "SDL2main.lib")
#pragma comment(lib, "SDL2_ttf.lib")// 【这里设置 utf-8 字符集】
#pragma execution_character_set("utf-8")constexpr int SRC_WIDTH = 640;
constexpr int SRC_HEIGHT = 480;
// 错误处理
#define MyError(ErrorMessage) \{\std::cout << "[Error]: " << (ErrorMessage) << std::endl;\return -1;\}int main(int argc, char* argv[])
{// Initif (SDL_Init(SDL_INIT_EVERYTHING) < 0)MyError("Failed to Initialize SDL!");if (TTF_Init() == -1)MyError("Failed to Initialize TTF!");SDL_Window* window = SDL_CreateWindow("HelloSDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SRC_WIDTH, SRC_HEIGHT, SDL_WINDOW_SHOWN);if (!window)MyError("Failed to create window!");SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);if (!renderer)MyError("Failed to create window renderer");// 加载字体const char* text = "中文!";TTF_Font* font = TTF_OpenFont("res/fonts/simhei.ttf", 28);//SDL_Surface* solidSurface = TTF_RenderText_Solid(font, text, { 255, 255, 255, 255 }); // 这个是不能正常输出中文的,会乱码SDL_Surface* blendSurface = TTF_RenderUTF8_Blended(font, text, { 255, 255, 255, 255 }); // 文字是白色SDL_Texture* blendTexture = SDL_CreateTextureFromSurface(renderer, blendSurface);SDL_Rect blendRect = { 0, 0, blendSurface->w, blendSurface->h };SDL_FreeSurface(blendSurface);// Game RunningSDL_Event event;bool running = true;while (running){// Event Loopwhile (SDL_PollEvent(&event)){if (event.type == SDL_QUIT)running = false;}// 清屏(黑色)SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);SDL_RenderClear(renderer);// 绘制字体SDL_RenderCopy(renderer, blendTexture, nullptr, &blendRect);// 更新屏幕SDL_RenderPresent(renderer);}// Clear upTTF_CloseFont(font);SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window);TTF_Quit();SDL_Quit();return 0;
}
2. 运行结果
三、设置中文标题
// 【这里设置 utf-8 字符集】
#pragma execution_character_set("utf-8")
同上,设置了 utf-8 字符集即可设置中文标题
SDL_Window* window = SDL_CreateWindow("中文标题", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SRC_WIDTH, SRC_HEIGHT, SDL_WINDOW_SHOWN);
1. 运行结果
本节内容就到这里了,下卷会继续分享 SDL 的基本使用
The End.
【SDL游戏编程入门第十六卷】输出中文SDL_ttf以及设置中文标题相关推荐
- shell 脚本比较字符串相等_LINUX快速入门第十六章:Shell 流程控制
Shell 流程控制 和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?phpif (isset($_GET["q"])) { s ...
- Android入门第十六篇之Style与Theme
本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验,这些客户端都做得布局合理而且美观.. ...
- c# 编程入门第六课常量,枚举,枚举转换成其他类型变量(枚举和int,转 string字符串转枚举),结构体,数组,冒泡排序,实际使用排序,方法(函数)
c# 编程入门第六课 文章目录 c# 编程入门第六课 1. 常量 2. 枚举 3. 枚举转换成其他类型变量 3.1 枚举和int 3.2 转string 3.2 字符串转枚举 4.结构体 5.数组 7 ...
- 2021-11-23----韩顺平Java入门第十四天
韩顺平Java入门第十四天(排序.查找) 1.排序 1).排序的介绍:排序是将多个数据,依指定的顺序进行排列的过程. 2).内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序 ...
- QT入门第十天 QT安装和使用alsa库和jpeg库实现音视频录制
QT入门第十天QT安装和使用alsa库和jpeg库实现音视频录制 第一章 ALSA库的移植和使用 1.ALSA简介 2.移植ALSA (1)移植步骤 3.把移植好的库下载到开发板配置 4.使用移植好的 ...
- QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号
QT入门第十四天 串口通信[QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号 第一章 常见的硬件通信接口协议 [1]硬件通信接口协议 [2]使用串 ...
- python编程入门第3版pdf-Python编程入门第3版PDF电子书免费下载
本文档的主要内容详细介绍的是Python编程入门第3版PDF电子书免费下载. Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,自20世纪90年代初诞生至今,逐渐被广泛应用于处理系统 ...
- C语言编程>第二十六周 ⑥ 请补充fun函数,该函数的功能是:按 “0”到 “9”统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。
例题:请补充fun函数,该函数的功能是:按 "0"到 "9"统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中.注意:不能使用字符串库函数. ...
- C语言编程>第二十六周 ① 函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例题:函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换.形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动. 例如,若a所指数组中的数据依次为:11 22 33 ...
最新文章
- yanf4j引入了客户端非阻塞API
- 【JAVA并发编程实战】1、对象的共享
- Android Bootloader LittleKernel的两篇文章 【转】
- C#查找指定窗口的子窗口的句柄
- java---多线程及线程的概念
- 从0开始html前端页面开发_CSS设置图像边框阴影
- 三十年了,读书依然不求甚解:一个普通程序员的读书生涯回顾
- 快消品图像识别丨无人店背后的商品识别技术
- Simulink三相电机仿真(4)
- 腾讯地图标注_怎样在导航地图上标注公司名和位置
- XDS100 V2仿真器驱动及安装指导
- 如何证明圆锥面积=1/3圆柱面积?
- 尝试做个公众号,歌曲类型的,有兴趣可以关注一下
- robosense 16线激光雷达标定
- 一些常用的postman测试脚本
- 针对写好的网页随着窗口大小改变,里面布局变乱的解决方法
- SAP 销项税多科目配置
- 为什叫c语言,为什么c语言叫c语言?
- 较简单的c语言航班管理系统
- 多维数据驱动的粮食安全分析与智能决策系统研究与实践