跟着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.mfbz.cn/a/327929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Video 不支持微信小程序的show-bottom-progress属性

原文地址&#xff1a;Video 不支持微信小程序的show-bottom-progress属性-鹭娃网络 相关平台 微信小程序 小程序基础库: 2.20.1使用框架: React 复现步骤 import { Video} from tarojs/components; 渲染一个Video播放视频&#xff0c;无法隐藏手机屏幕最底部的进度条&#…

springcloud Alibaba中gateway和sentinel联合使用

看到这个文章相信你有一定的sentinel和gateway基础了吧。 官网的gateway和sentinel联合使用有些过时了&#xff0c;于是有了这个哈哈&#xff0c;给你看看官网的&#xff1a; 才sentinel1.6&#xff0c;现在都几了啊&#xff0c;所以有些过时。 下面开始讲解&#xff1a; 首先…

day02_计算机常识丶第一个程序丶注释丶关键字丶标识符

计算机常识 计算机如何存储数据 计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制 进制也就是进位计数制&#xff0c;是人为定义的带进位的计数方法 实例&#xff1a; // 在java 中 可以使用不同…

Linux实操学习

Linux常用操作 一、帮助命令1. man1.1 基本语法1.2 快捷键1.3 注意事项 2. help2.1 基本语法2.2 注意事项 3. 常用快捷键 二、文件目录类1. 常规操作1.1 pwd1.2 cd1.3 ls 2. 文件夹操作2.1 mkdir2.2 rmdir 3. 文件操作3.1 touch3.2 cp3.3 rm3.4 mv 4. 文件查看4.1 cat4.2 more4…

【视觉SLAM十四讲学习笔记】第五讲——相机模型

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

部署本地GPT

在现实生活中&#xff0c;很多公司或个人的资料是不愿意公布在互联网上的&#xff0c;但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢&#xff1f;于是我们构建自己或公司的本地专属GPT变得非常重要。 先看效果&#xff1a; 查资料不用愁 家教不…

CF1178F2 Long Colorful Strip 题解 搜索

Long Colorful Strip 传送门 题面翻译 题目描述 这是 F 题的第二个子任务。F1 和 F2 的区别仅在对于 m m m 和时间的限制上 有 n 1 n1 n1 种颜色标号从 0 0 0 到 n n n&#xff0c;我们有一条全部染成颜色 0 0 0 的长为 m m m 的纸带。 Alice 拿着刷子通过以下的过…

3种ffmpeg-web端视频直播推流方案

ffmpeg-web端视频直播推流方案 记录了三种 ffmpeg 工具进行推流的方法&#xff0c;并在web端实现直播效果。 一. node-media-server ffmpeg 推流rtmp 安装node-media-server依赖,新建app.js运行 npm install node-media-server -g const NodeMediaServer require(node-…

flash-attn库安装记录

flash-attn库安装记录 第一步&#xff1a; 安装好cuda11.7 第二步&#xff1a; 使用代码export CUDA_HOME/usr/local/cuda-11.7让库找到cuda路径 第三步&#xff1a; 使用pip install flash-attn --no-build-isolation安装 安装成功显示

【REMB 】翻译:草案remb-03

REMB REMB消息 以及 绝对时间戳选项 在带宽估计中的使用 :an absolute-value timestamp option for use in bandwidth estimatoin. 接收方带宽估计的RTCP消息 REMB 这位大神翻译的更好。 RTCP message for Receiver Estimated Maximum Bitrate draft-alvestrand-rmcat-remb-03…

图像处理------亮度

from PIL import Imagedef change_brightness(img: Image, level: float) -> Image:"""按照给定的亮度等级&#xff0c;改变图片的亮度"""def brightness(c: int) -> float:return 128 level (c - 128)if not -255.0 < level < 25…

web:ezbypass-cat(白名单目录穿透漏洞、重定向)

题目 进入页面&#xff0c;页面显示如下 随便输入 显示密码错误 查看源代码&#xff0c;没有发现提示 尝试一下sql注入&#xff0c;也没有结果&#xff0c;这里看了大佬的wp&#xff0c;发现是目录穿透 使用bp抓包&#xff0c;网站目录爆破&#xff0c;发现flag.html&#xf…

【51单片机系列】proteus仿真单片机的串口通信

本文参考&#xff1a;https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口软件和单片机通信。通过在proteus设计一个单片机接收PC发送的数据&#xff0c;并将接收的数据发送出去&#xff0c;利用软件【Configure Virtual Serial Port Driver】创建一对虚拟串口&am…

Spring高手之路-Spring事务失效的场景详解

目录 前言 Transactional 应用在非 public 修饰的方法上 同一个类中方法调用&#xff0c;导致Transactional失效 final、static方法 Transactional的用法不对 Transactional 注解属性 propagation 设置不当 Transactional注解属性 rollbackFor 设置错误 用错注解 异常…

rust跟我学:模块编写与使用

图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info中模块的使用。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址:[我的Rust库更新]g…

考研C语言刷题篇之分支循环结构一

目录 第一题 第二题 方法一&#xff1a;要循环两次&#xff0c;一次求阶乘&#xff0c;一次求和。 注意&#xff1a;在求和时&#xff0c;如果不将sum每次求和的初始值置为1&#xff0c;那么求和就会重复。 方法二&#xff1a; 第三题 方法一&#xff1a;用数组遍历的思想…

认识并使用JWT

认识并使用JWT 一、互联网世界的用户认证二、对JWT的基本认知三、JWT的原理1 Header2 Payload3 Signature4 [参考资料](https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html) 四、使用JWT1、引入依赖2、jwt的生成与解析3、测试3.1 生成jwt3.2 解析jwt 一、互…

探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)

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

驾驭车联网的力量:深入车联网网络架构

车联网&#xff0c;作为移动互联网之后的新风口&#xff0c;以网联思想重新定义汽车&#xff0c;将其从简单的出行工具演化为个人的第二空间。车联网涵盖智能座舱和自动驾驶两大方向&#xff0c;构建在网联基础上&#xff0c;犀思云多年深度赋能汽车行业&#xff0c;本文将从车…

iphone 5s的充电时序原理图纸,iPAD充电讲解

上一篇写了iphone 5的时序。那是电池供电的开机时序。iphone 5s也是差不多的过程&#xff0c;不说了。现在看iphone5s手机充电时候的时序。iphone5s充电比iphone5充电简单了很多。 首先是usb接口接到手机上&#xff0c;usb线连接到J7接口上。J7接口不只是接usb&#xff0c;还能…
最新文章