Hazel game engine (020) botón y valor del mouse

Si hay errores en el código, terminología, etc. en el texto, por favor corrígeme

prefacio

  • de este programa

    Desde 019, es posible detectar si se presiona una tecla, si se hace clic con el mouse, la posición del mouse, etc. en cualquier parte del programa .

    Pero si desea presionar una determinada tecla (A), debe usar el valor de la clave definido por la macro GLFW

    if (Hazel::Input::IsKeyPressed(GLFW_KEY_A)) {
          
          
        HZ_TRACE("A键按下");
    }
    

    GLFW_KEY_A se define en el archivo #include <GLFW/glfw3.h>, por lo tanto, siempre que se use GLFW_KEY_A, este archivo de encabezado debe incluirse. Esto no es bueno y el valor de la clave debe personalizarse para eliminar el cierre. conexión con GLFW.

    if (Hazel::Input::IsKeyPressed(HZ_KEY_A)) {
          
          
        HZ_TRACE("A键按下");
    }
    
  • ¿Por qué desea personalizar el valor clave?

    Debido a que el motor quiere usar glfw en mac y linux en el futuro, y usar win32 windows en windows, y los valores clave de win32 windows son inconsistentes con los valores clave de glfw windows , por lo que es necesario personalizar y tener en cuenta las bibliotecas comunes de dos ventanas.

  • Cómo tener en cuenta el método de análisis de las dos bibliotecas de ventanas (aún no implementado)

    Cherno habló mucho, estoy un poco mareado, probablemente

    • Según la macrodefinición

      Por ejemplo: si es una ventana win32, el valor de la clave personalizada Tab=9, si es una ventana glfw, el valor de la clave personalizada Tab=258

    • Mapeo por función

      Proporciona una función similar a HZKEYToWin32Key (tecla HZ_KEY), convierte el valor clave de Win32 según la entrada HZ_KEY

relacionado con el proyecto

el código

  • Códigos clave

    #pragma once
    
    // From glfw3.h 参考glfw3.h中的键值
    #define HZ_KEY_SPACE              32
    #define HZ_KEY_APOSTROPHE         39  /* ' */
    #define HZ_KEY_COMMA              44  /* , */
    #define HZ_KEY_MINUS              45  /* - */
    #define HZ_KEY_PERIOD             46  /* . */
    #define HZ_KEY_SLASH              47  /* / */
    #define HZ_KEY_0                  48
    #define HZ_KEY_1                  49
    #define HZ_KEY_2                  50
    #define HZ_KEY_3                  51
    #define HZ_KEY_4                  52
    #define HZ_KEY_5                  53
    #define HZ_KEY_6                  54
    #define HZ_KEY_7                  55
    #define HZ_KEY_8                  56
    #define HZ_KEY_9                  57
    #define HZ_KEY_SEMICOLON          59  /* ; */
    #define HZ_KEY_EQUAL              61  /* = */
    #define HZ_KEY_A                  65
    #define HZ_KEY_B                  66
    #define HZ_KEY_C                  67
    #define HZ_KEY_D                  68
    #define HZ_KEY_E                  69
    #define HZ_KEY_F                  70
    #define HZ_KEY_G                  71
    #define HZ_KEY_H                  72
    #define HZ_KEY_I                  73
    #define HZ_KEY_J                  74
    #define HZ_KEY_K                  75
    #define HZ_KEY_L                  76
    #define HZ_KEY_M                  77
    #define HZ_KEY_N                  78
    #define HZ_KEY_O                  79
    #define HZ_KEY_P                  80
    #define HZ_KEY_Q                  81
    #define HZ_KEY_R                  82
    #define HZ_KEY_S                  83
    #define HZ_KEY_T                  84
    #define HZ_KEY_U                  85
    #define HZ_KEY_V                  86
    #define HZ_KEY_W                  87
    #define HZ_KEY_X                  88
    #define HZ_KEY_Y                  89
    #define HZ_KEY_Z                  90
    #define HZ_KEY_LEFT_BRACKET       91  /* [ */
    #define HZ_KEY_BACKSLASH          92  /* \ */
    #define HZ_KEY_RIGHT_BRACKET      93  /* ] */
    #define HZ_KEY_GRAVE_ACCENT       96  /* ` */
    #define HZ_KEY_WORLD_1            161 /* non-US #1 */
    #define HZ_KEY_WORLD_2            162 /* non-US #2 */
    
    /* Function keys */
    #define HZ_KEY_ESCAPE             256
    #define HZ_KEY_ENTER              257
    #define HZ_KEY_TAB                258
    #define HZ_KEY_BACKSPACE          259
    #define HZ_KEY_INSERT             260
    #define HZ_KEY_DELETE             261
    #define HZ_KEY_RIGHT              262
    #define HZ_KEY_LEFT               263
    #define HZ_KEY_DOWN               264
    #define HZ_KEY_UP                 265
    #define HZ_KEY_PAGE_UP            266
    #define HZ_KEY_PAGE_DOWN          267
    #define HZ_KEY_HOME               268
    #define HZ_KEY_END                269
    #define HZ_KEY_CAPS_LOCK          280
    #define HZ_KEY_SCROLL_LOCK        281
    #define HZ_KEY_NUM_LOCK           282
    #define HZ_KEY_PRINT_SCREEN       283
    #define HZ_KEY_PAUSE              284
    #define HZ_KEY_F1                 290
    #define HZ_KEY_F2                 291
    #define HZ_KEY_F3                 292
    #define HZ_KEY_F4                 293
    #define HZ_KEY_F5                 294
    #define HZ_KEY_F6                 295
    #define HZ_KEY_F7                 296
    #define HZ_KEY_F8                 297
    #define HZ_KEY_F9                 298
    #define HZ_KEY_F10                299
    #define HZ_KEY_F11                300
    #define HZ_KEY_F12                301
    #define HZ_KEY_F13                302
    #define HZ_KEY_F14                303
    #define HZ_KEY_F15                304
    #define HZ_KEY_F16                305
    #define HZ_KEY_F17                306
    #define HZ_KEY_F18                307
    #define HZ_KEY_F19                308
    #define HZ_KEY_F20                309
    #define HZ_KEY_F21                310
    #define HZ_KEY_F22                311
    #define HZ_KEY_F23                312
    #define HZ_KEY_F24                313
    #define HZ_KEY_F25                314
    #define HZ_KEY_KP_0               320
    #define HZ_KEY_KP_1               321
    #define HZ_KEY_KP_2               322
    #define HZ_KEY_KP_3               323
    #define HZ_KEY_KP_4               324
    #define HZ_KEY_KP_5               325
    #define HZ_KEY_KP_6               326
    #define HZ_KEY_KP_7               327
    #define HZ_KEY_KP_8               328
    #define HZ_KEY_KP_9               329
    #define HZ_KEY_KP_DECIMAL         330
    #define HZ_KEY_KP_DIVIDE          331
    #define HZ_KEY_KP_MULTIPLY        332
    #define HZ_KEY_KP_SUBTRACT        333
    #define HZ_KEY_KP_ADD             334
    #define HZ_KEY_KP_ENTER           335
    #define HZ_KEY_KP_EQUAL           336
    #define HZ_KEY_LEFT_SHIFT         340
    #define HZ_KEY_LEFT_CONTROL       341
    #define HZ_KEY_LEFT_ALT           342
    #define HZ_KEY_LEFT_SUPER         343
    #define HZ_KEY_RIGHT_SHIFT        344
    #define HZ_KEY_RIGHT_CONTROL      345
    #define HZ_KEY_RIGHT_ALT          346
    #define HZ_KEY_RIGHT_SUPER        347
    #define HZ_KEY_MENU               348
    
  • Códigos de los botones del ratón

    #pragma once
    
    // From glfw3.h
    #define HZ_MOUSE_BUTTON_1         0
    #define HZ_MOUSE_BUTTON_2         1
    #define HZ_MOUSE_BUTTON_3         2
    #define HZ_MOUSE_BUTTON_4         3
    #define HZ_MOUSE_BUTTON_5         4
    #define HZ_MOUSE_BUTTON_6         5
    #define HZ_MOUSE_BUTTON_7         6
    #define HZ_MOUSE_BUTTON_8         7
    #define HZ_MOUSE_BUTTON_LAST      HZ_MOUSE_BUTTON_8
    #define HZ_MOUSE_BUTTON_LEFT      HZ_MOUSE_BUTTON_1
    #define HZ_MOUSE_BUTTON_RIGHT     HZ_MOUSE_BUTTON_2
    #define HZ_MOUSE_BUTTON_MIDDLE    HZ_MOUSE_BUTTON_3
    

Los valores de definición de macro de botones y mouse son todas definiciones de macro de GLFW.

efecto de prueba

  • Aplicación Sandbox

    class ExampleLayer : public Hazel::Layer
    {
          
          
    public:
    	ExampleLayer()
    		: Layer("Example"){
          
          }
        // 输入轮询
    	void OnUpdate() override{
          
          
    		//HZ_INFO("ExampleLayer::Update");
    		if (Hazel::Input::IsKeyPressed(HZ_KEY_A)) {
          
          // 使用键值,检测A键是否按下
    			HZ_TRACE("A键按下(poll)");
    		}
    	}
        // 事件系统
    	void OnEvent(Hazel::Event& event) override{
          
          
    		//HZ_TRACE("examplayer:{0}", event);
    		if (event.GetEventType() == Hazel::EventType::KeyPressed) {
          
          
    			Hazel::KeyPressedEvent& e = (Hazel::KeyPressedEvent&)event;
    			if (e.GetKeyCode() == HZ_KEY_A) {
          
          // 使用键值,检测A键是否按下
    				HZ_TRACE("A键按下(event)");
    			}
    			HZ_TRACE("{0}",(char)e.GetKeyCode());
    		}
    	}
    };
    

    Por favor agregue una descripción de la imagen

    Se puede ver que tanto el sondeo de entrada como los sistemas de eventos pueden usar valores clave personalizados para determinar si se presiona una tecla

Supongo que te gusta

Origin blog.csdn.net/qq_34060370/article/details/131388667
Recomendado
Clasificación