跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode

自定义KeyCode

先把glfw3.h里的KeyCode的定义抄到咱这里来。

在YOTO下创建KeyCode.h:

#pragma once#ifdef YT_PLATFORM_WINDOWS///从glfw3中拿的
#define YT_KEY_SPACE              32
#define YT_KEY_APOSTROPHE         39  /* ' */
#define YT_KEY_COMMA              44  /* , */
#define YT_KEY_MINUS              45  /* - */
#define YT_KEY_PERIOD             46  /* . */
#define YT_KEY_SLASH              47  /* / */
#define YT_KEY_0                  48
#define YT_KEY_1                  49
#define YT_KEY_2                  50
#define YT_KEY_3                  51
#define YT_KEY_4                  52
#define YT_KEY_5                  53
#define YT_KEY_6                  54
#define YT_KEY_7                  55
#define YT_KEY_8                  56
#define YT_KEY_9                  57
#define YT_KEY_SEMICOLON          59  /* ; */
#define YT_KEY_EQUAL              61  /* = */
#define YT_KEY_A                  65
#define YT_KEY_B                  66
#define YT_KEY_C                  67
#define YT_KEY_D                  68
#define YT_KEY_E                  69
#define YT_KEY_F                  70
#define YT_KEY_G                  71
#define YT_KEY_H                  72
#define YT_KEY_I                  73
#define YT_KEY_J                  74
#define YT_KEY_K                  75
#define YT_KEY_L                  76
#define YT_KEY_M                  77
#define YT_KEY_N                  78
#define YT_KEY_O                  79
#define YT_KEY_P                  80
#define YT_KEY_Q                  81
#define YT_KEY_R                  82
#define YT_KEY_S                  83
#define YT_KEY_T                  84
#define YT_KEY_U                  85
#define YT_KEY_V                  86
#define YT_KEY_W                  87
#define YT_KEY_X                  88
#define YT_KEY_Y                  89
#define YT_KEY_Z                  90
#define YT_KEY_LEFT_BRACKET       91  /* [ */
#define YT_KEY_BACKSLASH          92  /* \ */
#define YT_KEY_RIGHT_BRACKET      93  /* ] */
#define YT_KEY_GRAVE_ACCENT       96  /* ` */
#define YT_KEY_WORLD_1            161 /* non-US #1 */
#define YT_KEY_WORLD_2            162 /* non-US #2 *//* Function keys */
#define YT_KEY_ESCAPE             256
#define YT_KEY_ENTER              257
#define YT_KEY_TAB                258
#define YT_KEY_BACKSPACE          259
#define YT_KEY_INSERT             260
#define YT_KEY_DELETE             261
#define YT_KEY_RIGHT              262
#define YT_KEY_LEFT               263
#define YT_KEY_DOWN               264
#define YT_KEY_UP                 265
#define YT_KEY_PAGE_UP            266
#define YT_KEY_PAGE_DOWN          267
#define YT_KEY_HOME               268
#define YT_KEY_END                269
#define YT_KEY_CAPS_LOCK          280
#define YT_KEY_SCROLL_LOCK        281
#define YT_KEY_NUM_LOCK           282
#define YT_KEY_PRINT_SCREEN       283
#define YT_KEY_PAUSE              284
#define YT_KEY_F1                 290
#define YT_KEY_F2                 291
#define YT_KEY_F3                 292
#define YT_KEY_F4                 293
#define YT_KEY_F5                 294
#define YT_KEY_F6                 295
#define YT_KEY_F7                 296
#define YT_KEY_F8                 297
#define YT_KEY_F9                 298
#define YT_KEY_F10                299
#define YT_KEY_F11                300
#define YT_KEY_F12                301
#define YT_KEY_F13                302
#define YT_KEY_F14                303
#define YT_KEY_F15                304
#define YT_KEY_F16                305
#define YT_KEY_F17                306
#define YT_KEY_F18                307
#define YT_KEY_F19                308
#define YT_KEY_F20                309
#define YT_KEY_F21                310
#define YT_KEY_F22                311
#define YT_KEY_F23                312
#define YT_KEY_F24                313
#define YT_KEY_F25                314
#define YT_KEY_KP_0               320
#define YT_KEY_KP_1               321
#define YT_KEY_KP_2               322
#define YT_KEY_KP_3               323
#define YT_KEY_KP_4               324
#define YT_KEY_KP_5               325
#define YT_KEY_KP_6               326
#define YT_KEY_KP_7               327
#define YT_KEY_KP_8               328
#define YT_KEY_KP_9               329
#define YT_KEY_KP_DECIMAL         330
#define YT_KEY_KP_DIVIDE          331
#define YT_KEY_KP_MULTIPLY        332
#define YT_KEY_KP_SUBTRACT        333
#define YT_KEY_KP_ADD             334
#define YT_KEY_KP_ENTER           335
#define YT_KEY_KP_EQUAL           336
#define YT_KEY_LEFT_SHIFT         340
#define YT_KEY_LEFT_CONTROL       341
#define YT_KEY_LEFT_ALT           342
#define YT_KEY_LEFT_SUPER         343
#define YT_KEY_RIGHT_SHIFT        344
#define YT_KEY_RIGHT_CONTROL      345
#define YT_KEY_RIGHT_ALT          346
#define YT_KEY_RIGHT_SUPER        347
#define YT_KEY_MENU               348
#endif // YT_PLATFORM_WINDOWS

 MouseButtonCodes.h:和KeyCode.h一样作用,把GLFW改成自己的

#pragma once
#define YT_MOUSE_BUTTON_1         0
#define YT_MOUSE_BUTTON_2         1
#define YT_MOUSE_BUTTON_3         2
#define YT_MOUSE_BUTTON_4         3
#define YT_MOUSE_BUTTON_5         4
#define YT_MOUSE_BUTTON_6         5
#define YT_MOUSE_BUTTON_7         6
#define YT_MOUSE_BUTTON_8         7
#define YT_MOUSE_BUTTON_LAST      YT_MOUSE_BUTTON_8
#define YT_MOUSE_BUTTON_LEFT      YT_MOUSE_BUTTON_1
#define YT_MOUSE_BUTTON_RIGHT     YT_MOUSE_BUTTON_2
#define YT_MOUSE_BUTTON_MIDDLE    YT_MOUSE_BUTTON_3`

把KeyCode放入头文件

YOTO.h:

#pragma once
#include "YOTO/Application.h"
#include"YOTO/Layer.h"
#include "YOTO/Log.h"#include"YOTO/Input.h"
#include"YOTO/KeyCode.h"
#include"YOTO/MouseButtonCodes.h"#include"YOTO/ImGui/ImGuiLayer.h"
//入口点
#include"YOTO/EntryPoint.h"

SandboxApp.cpp:在ExampleLayer测试轮询和KeyCode

#include<YOTO.h>
#include<stdio.h>class ExampleLayer:public YOTO::Layer
{
public:ExampleLayer():Layer("Example") {}void OnUpdate()override {//YT_CLIENT_INFO("测试update");if (YOTO::Input::IsKeyPressed(YT_KEY_TAB)) {YT_CLIENT_INFO("ExampleLayerOnUpdate:TAB按下了");}}void OnEvent(YOTO::Event& event)override {if (event.GetEventType() == YOTO::EventType::KeyPressed) {YOTO:: KeyPressedEvent& e = (YOTO::KeyPressedEvent&)event;YT_CLIENT_TRACE("ExampleLayer:{0}",(char)e.GetKeyCode());if (e.GetKeyCode()==YT_KEY_TAB) {YT_CLIENT_INFO("ExampleLayerOnEvent:TAB按下了");}}//YT_CLIENT_TRACE("SandBoxApp:测试event{0}", event);}private:};class Sandbox:public YOTO::Application
{
public:Sandbox() {PushLayer(new ExampleLayer());PushLayer(new YOTO::ImGuiLayer());}~Sandbox() {}private:};YOTO::Application* YOTO::CreateApplication() {printf("helloworld");return new Sandbox();
}

测试:

 明日继续更新数学和ImGui停靠和视口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迈向2024:医疗机器人的市场前景与技术革新

原创 | 文 BFT机器人 医疗机器人技术正以前所未有的速度在主流医学领域取得卓越进展&#xff0c;新应用、新技术不断涌现&#xff0c;使得该领域在过去一年中取得了令人惊叹的增长。然而&#xff0c;这仅仅是冰山一角&#xff0c;未来的发展空间仍然广阔无垠。 展望2024年&…

海外云手机:跨境养号的新趋势

近年来&#xff0c;市场综合数据显示&#xff0c;利用海外云手机进行跨境养号已经成为跨境电商发展的新潮流。特别是在社交电商营销和短视频引流领域&#xff0c;海外云手机不仅能够提高流量的质量&#xff0c;还能让商家实现业务翻倍增长。接下来&#xff0c;本文将简要阐述海…

软件测试|使用Python生成PDF文件

简介 PDF&#xff08;Portable Document Format&#xff09;是一种常用的文档格式&#xff0c;具有跨平台兼容性、保真性、安全性和交互性等特点。我们日常生活工作中的合同、报告、论文等通常都采用PDF格式&#xff0c;以确保文档在不同的操作系统&#xff08;例如 Windows、…

Leetcode刷题【每日n题】(2)

&#x1f95a;今日鸡汤&#x1f95a; 修仙之道&#xff0c;需有勇气和决心&#xff0c;方能战胜一切困难。 ——《斗破苍穹》 目录 1.题目一 2.思路分析 3.代码实现 4.题目二 5.思路分析 6.代码实现 1.题目一 16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 …

LabVIEW高效振动时效处理系统

概述&#xff1a;介绍了一个利用LabVIEW开发的振动时效处理系统&#xff0c;有效降低加工工件的内部残余应力&#xff0c;提升其质量和寿命。 项目背景 工业加工中的工件常存在残余应力问题&#xff0c;这直接影响工件的质量和寿命。虽然热时效和自然时效法被广泛应用于降低残余…

基于ssm的疫苗预约系统论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装疫苗预约系统软件来发挥其高效地信息处理的作用&#xff0c…

基于Python的货币识别技术实现

目录 介绍本文的目的和意义货币识别技术的应用场景货币识别的基本原理图像处理技术在货币识别中的应用特征提取方法:SIFT、HOG等支持向量机(SVM)分类器的使用实现过程数据集的收集和预处理特征提取和训练分类器参考文献介绍 本文的目的和意义 本文的目的是介绍如何利用Pyt…

LLMs之GLM-4:GLM-4的简介、安装和使用方法、案例应用之详细攻略

LLMs之GLM-4&#xff1a;GLM-4的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年01月16日&#xff0c;智谱AI在「智谱AI技术开放日(Zhipu DevDay)」推出新一代基座大模型GLM-4。GLM-4 的主要亮点和能力如下:>> 性能与GPT-4相近&#xff1a;多模态、长文…

YOLOv5改进系列(26)——添加RFAConv注意力卷积(感受野注意力卷积运算)

【YOLOv5改进系列】前期回顾&#xff1a; YOLOv5改进系列&#xff08;0&#xff09;——重要性能指标与训练结果评价及分析 YOLOv5改进系列&#xff08;1&#xff09;——添加SE注意力机制 YOLOv5改进系列&#xff08;2&#xff09;——添加CBAM注意力机制 YOLOv5改进系列&…

VM安装群晖系统 挂载整个硬盘给群晖系统

前言 在我们日常业务需求中&#xff0c;经常需要把整个磁盘的空间分配给群晖使用&#xff0c;那么如何通过vm分配整个磁盘空间给群晖系统。 操作 需要用管理员运行VM虚拟机 然后添加硬盘 就可以有权限全部添加了。这样会清除要挂载的磁盘的全部的数据。

十五、CSS3DObject和CSS2DObject的区别

在3d场景中我们会遇到很多标签,主要分为三种,css3dobject、css2dobject、css3dsprite三种,今天主要说说css3dobject和css2dobject的相似点和区别。 Threejs版本:0.138.3 下面看实现的效果: 相似点 使用方法都是差不多的,下面讲解下css2dobject的使用方法在index.html增…

[ACM学习] 动态规划基础之一二三维dp

课内学习的动态规划 有记忆的迭代 优化解的结构&#xff1a;原始问题的一部分解是子问题的解 三要素&#xff1a;1.子问题 2.状态的定义 3.状态转移方程 定义 线性dp的一道例题 dp[i]表示以位置 i 结尾的方案总数&#xff0c;dp[4]2&#xff0c;因为&#xff1a;首先只放一…

【驱动】TI AM437x(内核调试-06):网卡(PHY和MAC)、七层OSI

1、网络基础知识 1.1 七层OSI 第一层:物理层。 1)需求: 两个电脑之间如何进行通信? 具体就是一台发比特流,另一台能够收到。于是就有了物理层:主要是定义设备标准,如网线的额接口类型、管线的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流,就是从1/0…

【GitHub项目推荐--一行命令下载全网视频】【转载】

项目地址&#xff1a;https://github.com/soimort/you-get 首先声明&#xff0c;请不要使用该项目从事违法活动哦~仅供学习使用&#xff01; 解决痛点 如果你上网的时候看了一些东西不错&#xff0c;想下载下来&#xff0c;或者在线观看喜欢的视频&#xff0c;但是没有找到网…

xilinxi mulitboot 启动

xilinix在线更新有两种方式&#xff0c;一种是使用ICAP原语&#xff0c;另一中是在xdc中约束&#xff0c;根据应用的场景不同&#xff0c;选用不同的启动方式&#xff0c;第二种更为简单。 可参考官方提供的手册和实例 XAPP1247 链接&#xff1a; XAPP1247 golden和updata.b…

【零基础入门Python数据分析】Anaconda3 JupyterNotebookseaborn版

目录 一、安装环境 python介绍 anaconda介绍 jupyter notebook介绍 anaconda3 环境安装 解决JuPyter500&#xff1a;Internal Server Error问题-CSDN博客 Jupyter notebook快捷键操作大全 二、Python基础入门 数据类型与变量 数据类型 变量及赋值 布尔类型与逻辑运算…

基于时域有限差分法的FDTD的计算电磁学算法-YEE网格下的更新公式推导

基于时域有限差分法的FDTD的计算电磁学算法&#xff08;含Matlab代码&#xff09;-YEE网格下的更新公式推导 参考书籍&#xff1a;The finite-difference time-domain method for electromagnetics with MATLAB simulations&#xff08;国内翻译版本&#xff1a;MATLAB模拟的电…

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析&#xff08;Singular Spectrum Analysis&#xff09;是一种处理非线性时间序列数据的方法&#xff0c;可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…

C#,入门教程(66)——枚举Enum的高等用法

前言&#xff1a;国内码农与国外优秀程序员的最大区别是&#xff0c;我们的专家、教授喜欢唾沫横飞地&#xff0c;夸夸其谈语言特性、框架、性能&#xff0c;唯一目的是带私货&#xff08;书籍或教程&#xff09;&#xff0c;很少能写出真有用的程序。差距在哪呢&#xff1f;基…

线性代数——行列式相关性质

目录 一、行列式与它的转置列行列式相等 二、对换行列式的两行&#xff08;列&#xff09;&#xff0c;行列式变号 三、行列式某行&#xff08;列&#xff09;有公因子k&#xff0c;则k可以提到行列式外 四、行列式中若两行成比例&#xff0c;则行列式为0 五、行列式的某一行…