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

这篇具有很好参考价值的文章主要介绍了跟着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();
}

测试:

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

 明日继续更新数学和ImGui停靠和视口文章来源地址https://www.toymoban.com/news/detail-800477.html

到了这里,关于跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 跟着cherno手搓游戏引擎【6】ImGui和ImGui事件

    下载链接: GitHub - TheCherno/imgui: Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies  新建文件夹,把下载好的文件放入对应路径:  SRC下的premake5.lua文件:添加ImGui 在Platform下创建OpenGl,将imgui_impl_opengl3.cpp和.h加入到该文件夹。 并且更名: 150行改为:

    2024年01月17日
    浏览(41)
  • 跟着cherno手搓游戏引擎【4】窗口抽象、GLFW配置、窗口事件

    在vendor里创建GLFW文件夹: 在github上下载,把包下载到GLFW包下。 GitHub - TheCherno/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input修改SRC/premake5.lua的配置:12、13、15、36、37、38、39、40行的代码是新加上去的: GLFW中的premake5.lua:  如出现此BUG:请找GLFW中的premake5文件,

    2024年01月21日
    浏览(43)
  • 虚幻引擎游戏开发过程中,游戏鼠标如何双击判定?

    UE虚幻引擎对于游戏开发者来说都不陌生,市面上有47%主机游戏使用虚幻引擎开发游戏。作为是一款游戏的核心动力,它的功能十分完善,囊括了场景制作、灯光渲染、动作镜头、粒子特效、材质蓝图等。本文介绍了虚幻引擎游戏开发过程中游戏鼠标双击判定,一起来看看吧

    2024年02月13日
    浏览(47)
  • 【Overload游戏引擎细节分析】鼠标键盘控制摄像机原理

    在上文中分析了摄像机类的实现,在计算投影视图矩阵时需要给摄像机输入其位置及转动四元数。这两个量一般通过鼠标键盘来控制,从而达到控制摄像机的目的。本文分析一下其控制原理。 Overload的摄像机控制实现在类CameraController中,其有三个个方法HandleCameraPanning、Hand

    2024年02月08日
    浏览(44)
  • 【Overload游戏引擎细节分析】编辑器对象鼠标拾取原理

          Overload的场景视图区有拾取鼠标功能,单击拾取物体后会显示在Inspector面板中。本文来分析鼠标拾取这个功能背后的原理。 一、OpenGL的FrameBuffer 实现鼠标拾取常用的方式有两种:渲染id到纹理、光线投射求交。Overload使用的是渲染id到纹理,其实现需借助OpenGL的帧缓冲

    2024年02月04日
    浏览(50)
  • 用js实现元素跟着鼠标转动效果

     当鼠标移入body时,元素跟着鼠标旋转,所有的元素都看向鼠标的位置。 在一个shell中,总共有 36 个item。 这里对shell盒子采用css3的网格布局,对它的子元素进行分成6行6列的形式,宽和高都为50px, 然后利用双伪元素来画它的小眼睛。 然后每个小方块都化成这个样子。 原理:

    2024年02月09日
    浏览(44)
  • C# 开发 DNF手搓按键。keybd_event 模拟键盘操作(重点是方向键模拟)

    一、开发目标:使用keybd_event和键盘HOOK实现一个按键模拟DNF中的技能指令。操作角色是红眼。 二、项目进度:初步实现技能指令释放,没有对键盘连按做处理,会有N多重复命令,导致角色会抽搐。没有做自定义按键,所有指令都是写到程序中的,不够灵活。 三、开发环境:

    2024年02月09日
    浏览(39)
  • input[type=“number“]鼠标滚动时值跟着改变

    原因:table里面嵌入input[type=\\\"number\\\"]输入框,鼠标滚动时值跟着改变 需求:鼠标滚动时,不改变input值,只页面滚动 思路: * 1.监听mousewheel事件; * 2.获取input输入框元素; * 3.当监听到鼠标滚动事件时,设置input元素失去光标 使用: *(1)在DOM上加上v-stopMousewheel即可      

    2024年02月11日
    浏览(34)
  • 鼠标驱动框架:模拟键盘按键

    装载该驱动时,首先要卸载原本内核自带的驱动程序 # 把USB鼠标查到开发板上 # 先看看原来有哪些设备节点 ls /dev/input/event* # 安装驱动程序 insmod usbmouse_as_key.ko # 再看看新得到了哪个设备节点 ls /dev/input/event* # 执行命令, 假设event4是新节点 hexdump /dev/input/event4 # 点击鼠标按键即

    2024年01月16日
    浏览(37)
  • Matlab:连续按键、移动鼠标、鼠标点击、鼠标连点、输入字符,10行代码即可。

    Matlab 也可以实现 按键J灵 的一些基本功能,比如: 连续按键、移动鼠标、鼠标点击、鼠标连点和输入字符! 其中, “连续按键” :指间隔一定的时间(如:0.1s)按一下某个按键(如:键盘上的A键)。这个在游戏挂机时,用做 卡键练技能 很有效,而且使用Matlab语言 能避免

    2024年02月09日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包