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

2024-01-18 07:44

本文主要是介绍跟着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停靠和视口

这篇关于跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618407

相关文章

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

Smarty模板引擎工作机制(一)

深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解。 在没有使用Smarty模板引擎的情况下,我们都是将PHP程序和网页模板合在一起编辑的,好比下面的源代码: <?php$title="深处浅出之Smarty模板引擎工作机制";$content=