四、文本绘制和按键检测

(甲)文本绘制

文本是Text类,本质上是基于Sprite的,但是用户不需要考虑这么多。首先我们需要准备一个字体文件,在系统的C:\Windows\Fonts目录,有许多的字体文件,找一个自己喜欢的拷贝到工作目录里即可(如果要输出中文,则字体必须包含中文)。假设我们复制的是楷体(simkai.ttf),那么先要加载字体文件,并取一个名字。

sys->LoadFontFile(L"01", L"Data\\Font\\simkai.ttf");

然后通过“01”这个名字创建一个Text对象:

Text* _txtLT = canvas->CreateText(L"01", 24);//名字和大小
_txtLT->SetString(L"按WASD移动,QE旋转,ZX缩放");//文本内容

最后在帧函数中绘制,调动Render:

_txtLT->Render();

效果如图所示:

(乙)按键检测与坐标系

响应键盘和鼠标是使用Game的input成员(Input类),要实现移动效果,我们需要再次理解前面提到的Coor(坐标系)类。

Coor具有四个属性:

parent:父坐标系(Coor)

position:位置(Vector2,像素)

rotate: 旋转(float,弧度制)

scale:缩放 (Vector2,长和宽的比例)

前面我们使用了p->GetCoor()->SetPosition()的方式设置了位置,要旋转或者缩放精灵,则需要分别调用SetRotateSetScale函数。

我们需要每一帧都检测按键,所以在帧函数写道:

//记录位置
Vector2 pos = _arrSpr[1]->GetCoor()->GetPosition();
//计算位移,这里是1秒钟移动100像素
//time->GetRealDelta()返回的是一帧的时间
float dis_dt = 100.0f * time->GetRealDelta();//判断按键是否按下
if (input->KeyState(KeyCode::W))pos.b -= dis_dt;
if (input->KeyState(KeyCode::S))pos.b += dis_dt;
if (input->KeyState(KeyCode::A))pos.a -= dis_dt;
if (input->KeyState(KeyCode::D))pos.a += dis_dt;//设置新位置
_arrSpr[1]->GetCoor()->SetPosition(pos);

上面实现了按键位移,接下来实现旋转和缩放:

//旋转
float r = _arrSpr[1]->GetCoor()->GetRotate();
//每秒旋转 四分之一PI
float r_dt = Math::GetPI<1, 4>() * time->GetRealDelta();
if (input->KeyState(KeyCode::Q))r -= r_dt;
if (input->KeyState(KeyCode::E))r += r_dt;//缩放
float scale = _arrSpr[1]->GetCoor()->GetScale().a;
//每秒缩放0.5
float scale_dt = 0.5f * time->GetRealDelta();
if (input->KeyState(KeyCode::Z))scale -= scale_dt;
if (input->KeyState(KeyCode::X))scale += scale_dt;//设置属性
_arrSpr[1]->GetCoor()->SetPosition(pos);
_arrSpr[1]->GetCoor()->SetRotate(r);
_arrSpr[1]->GetCoor()->SetScale({scale, scale });

重新设置一下绿色精灵的父坐标系和位置,下面将它父坐标系设为了猫,这样它就会跟着猫精灵一起变换,具体效果就不截图了,代码如下:

_arrSpr[0]->GetCoor()->SetParent(_arrSpr[1]->GetCoor());
_arrSpr[0]->GetCoor()->SetPosition({ 100, 100 });

【DND图形库】四、文本绘制和按键检测相关推荐

  1. PIC单片机 按键检测识别

    目录 按键和PIC单片机 一.按键 二.按键的物理连接与检测 三.PIC16F18854单片机 按键检测及显示实验 按键排布 预期效果 总体流程 中断服务程序 PIC汇编程序 按键和PIC单片机 一. ...

  2. 【DND图形库】二、创建控制台窗口和游戏循环

    二.创建控制台窗口和游戏循环 (甲)为何我们需要创建控制台窗口 虽然游戏需要的是Windows窗口,但是这个窗口可以帮助我们查看即时的调试信息,不输出调试的程序就和不写注释的程序一样,后来修改的人总是 ...

  3. 一个学妹写的按键检测函数把我秀翻了!

    摘要:今年实验室来了三个学妹,其中一个学妹以前是物联网专业的,进了实验室老师二话没说:先把STM32单片机过一遍 上来第一个例程就是使用按键点亮一个LED灯,好家伙.点灯小师弟比较在行,毕竟32.FP ...

  4. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  5. 耳机驱动调试(插拔检测与按键检测)

    耳机驱动调试(插拔检测与按键检测) 小白一枚,欢各位大佬指出错误 耳机类型判断 三段和四段.欧标和美标 现在许多设备的耳机接口都采用3.5mm的耳机接口,其中终端就是,终端可以兼容三段和四段耳机:三段 ...

  6. 【STM32】GPIO输入—按键检测

    Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性 文章目录 2.1硬件设计 2.2软件设计 2.2.1编程要点 2.2.2代码分析 1.按键引脚宏定义 2.按键 ...

  7. 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.3 按键控制实验

    写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.3 按键控制实验,讲述按键控制的编程方法 官方例程下载:http ...

  8. STM32F103 GPIO之按键检测

    1.直接上代码 #include "stm32f10x.h" #include "led.h" #include "key.h"void K ...

  9. 固件库应用之按键检测

    文章目录 按键检测 什么是按键检测 按键硬件电路 编程步骤 1. 使能GPIO端口时钟 2. 初始化 GPIO 目标引脚为输入模式: 3. 检测GPIO引脚的输入,并判断按键状态 3.1 GPIO电平 ...

最新文章

  1. npm的一些常用命令(在国内,建议使用cnpm,在淘宝镜像里面下载就行)
  2. web service(web服务)总结
  3. 用开源组件构建属于你的 PHP 框架
  4. 关于删除数据仓库的数据
  5. [软件推荐]使用OneNote来构建你自己的知识库(OFFICE2010)
  6. .Net开发人员应该下载的十种必备工具(一)
  7. android数字滚动动画,Android超简单实现金钱滚动效果
  8. linux驱动之可加载模块
  9. OPNET网络仿真分析-1.6、OPNET软件使用
  10. AeroSpike踩坑手记1:Architecture of a Real Time Operational DBMS论文导读
  11. DL实战(1):tensorflow在mnist上实现siamese net
  12. java thread 几个状态_Java 几种线程状态之间的相互关系
  13. Java如何将窗口居中显示
  14. html+css美化后台登录界面
  15. Ubuntu1804安装ROS(melodic版本)
  16. 生物学和计算机学哪个好,生物学和计算机
  17. robots文件的作用
  18. System32和SysWow64文件夹的区别
  19. google黑客常用搜索语句
  20. 使用IDEA如何将项目打包成war包

热门文章

  1. Android开发教程之--sql语句一、创建/删除表Stringsql=Createtable
  2. 三十三、自从我会了Python中的PIL,发现了其实超级简单
  3. CVPR 2020 开源论文 | 多种可能性行人未来路径预测
  4. OpenCV-Python图像拼接方法
  5. 按钮悬浮固定在微信小程序底部
  6. php mpdf html 转pdf,使用 MPDF 将HTML转为PDF,然后将该PDF转为PNG图片的时候,中文报错... ...汗血宝马...
  7. python怎么批量处理数据的优点_Python数据处理干货,一文带你深入理解pandas的批量处理方式...
  8. seata+nacos出现failed to req API:/nacos/v1/ns/instance/beat after all servers([127.0.0.1:8848])
  9. 手把手带你领略双十一背后的核心组件Sentinel之流控规则
  10. eclipse安装lombok后无法启动解决办法