Aurora Engine 遊戲引擎入門 13(新增平臺的輸入)
#1 基本的輸入操作,滑鼠,鍵盤
#2 宣告基類,方便後續擴充和修改
#3 新增基於Window的窗體實現類
#1 基本的輸入操作,滑鼠,鍵盤
#2 宣告基類,方便後續擴充和修改
// Input.h
#pragma once
#include "Aurora/Core.h"
namespace Aurora
{
// AURORA_API 編譯的時候會生成dll
// 打包成庫,方便二次使用
class AURORA_API Input
{
public:
// inline 是行內函數,防止開闢過多的棧空間,進行編譯優化
// inline 的函式一般情況下是函式體比較小,太大的函式使用inline不划算
inline static bool IsKeyPressed(int keyCode) { return s_Instance->IsKeyPressedImpl(keyCode); }
inline static bool IsMouseButtonPressed(int button) { return s_Instance->IsMouseButtonPressedImpl(button); }
// pair 標準庫tuple派生的2個值的封裝,屬於攻擊模板類
inline static std::pair<float, float> GetMousePosition() { return s_Instance->GetMousePositionImpl(); }
inline static float GetMouseX() { return s_Instance->GetMouseXImpl(); }
inline static float GetMouseY() { return s_Instance->GetMouseYImpl(); }
protected:
virtual bool IsKeyPressedImpl(int keycode) = 0;
virtual bool IsMouseButtonPressedImpl(int button) = 0;
virtual std::pair<float, float> GetMousePositionImpl() = 0;
virtual float GetMouseXImpl() = 0;
virtual float GetMouseYImpl() = 0;
private:
static Input* s_Instance;
};
}
#3 新增基於Window的窗體實現類
// WindowsInput.h
#pragma once
#include "Aurora/Input.h"
namespace Aurora
{
class WindowsInput : public Input
{
protected:
virtual bool IsKeyPressedImpl(int keycode) override;
virtual bool IsMouseButtonPressedImpl(int button) override;
virtual std::pair<float, float> GetMousePositionImpl() override;
virtual float GetMouseXImpl() override;
virtual float GetMouseYImpl() override;
};
}
// WindowsInput.cpp
#include "aopch.h"
#include "WindowsInput.h"
#include "Aurora/Application.h"
#include <GLFW/glfw3.h>
namespace Aurora {
// 全域性定義靜態單例
Input* Input::s_Instance = new WindowsInput();
bool WindowsInput::IsKeyPressedImpl(int keycode)
{
auto window = static_cast<GLFWwindow*>(Application::Get().GetWindow().GetNativeWindow());
auto state = glfwGetKey(window, keycode);
return state == GLFW_PRESS || state == GLFW_REPEAT;
}
bool WindowsInput::IsMouseButtonPressedImpl(int button)
{
auto window = static_cast<GLFWwindow*>(Application::Get().GetWindow().GetNativeWindow());
auto state = glfwGetMouseButton(window, button);
return state == GLFW_PRESS;
}
std::pair<float, float> WindowsInput::GetMousePositionImpl()
{
auto window = static_cast<GLFWwindow*>(Application::Get().GetWindow().GetNativeWindow());
double xpos, ypos;
glfwGetCursorPos(window, &xpos, &ypos);
return { (float)xpos, (float)ypos };
}
float WindowsInput::GetMouseXImpl()
{
auto [x, y] = GetMousePositionImpl();
return x;
}
float WindowsInput::GetMouseYImpl()
{
auto [x, y] = GetMousePositionImpl();
return y;
}
}
相關文章
- VUE 實現 Studio 管理後臺(十二):新增輸入組合,複雜輸入,輸入框 Input 系列Vue
- IsWorld收藏平臺—使用入門
- LIBGDX遊戲引擎平臺介紹與搭建遊戲引擎
- 基於eui的白鷺引擎H5小遊戲入門總結UIH5遊戲
- ubuntu新增中文輸入法Ubuntu
- 五筆輸入法入門
- 遊戲色彩101(入門必看)遊戲
- Java入門----猜拳小遊戲Java遊戲
- Android跨平臺入門:手把手帶你快速入門Flutter!AndroidFlutter
- win10怎麼新增新的輸入法_如何在win10新增輸入法Win10
- 高通MDM平臺開發入門
- 為你的 Python 平臺類遊戲新增跳躍功能Python遊戲
- 直播平臺製作,html+css復刻登入輸入框HTMLCSS
- Nucleo入門--004通用輸入輸出
- njs最詳細的入門手冊:Nginx JavaScript EngineJSNginxJavaScript
- MySQL入門--儲存引擎MySql儲存引擎
- 直播電商平臺開發,輸入框的防抖
- 遊戲程式設計入門指南遊戲程式設計
- 遊戲開發入門(一)遊戲開發概述遊戲開發
- win10增加輸入法的方法_win10輸入法如何新增Win10
- 微信公眾平臺開發入門
- win10搜狗輸入法怎麼新增日語_win10新增日語輸入法的方法Win10
- 自媒體入門基礎知識,教你快速入門自媒體平臺
- 新手請教,遊戲入門程式 c遊戲
- 獨立遊戲開發入門指南遊戲開發
- unity案例入門(拾取遊戲)Unity遊戲
- win10玩遊戲老是彈出輸入法怎麼辦 玩遊戲shift鍵老彈出輸入法Win10遊戲
- win10系統如何新增輸入法_win10電腦怎麼新增輸入法Win10
- 持續整合平臺 01 jenkins 入門介紹Jenkins
- 監控平臺SkyWalking9入門實踐
- Android入門教程 | EditText 使用者輸入Android
- 5分鐘入門 next13
- vue 基礎入門筆記 13Vue筆記
- win10系統玩遊戲時如何將輸入法鎖定為英文輸入Win10遊戲
- win10在遊戲裡怎麼切換輸入法 win10玩遊戲切換輸入法如何操作Win10遊戲
- imemode 控制輸入法,控制輸入框的輸入法
- 從新建資料夾開始構建ShadowPlay Engine遊戲引擎(6)遊戲引擎
- MySQL儲存引擎入門介紹MySql儲存引擎