Aurora Engine 游戏引擎入门 13(添加平台的输入)

本文档是一份关于Aurora Engine的游戏引擎入门教程,着重讲解如何实现基本的输入操作,包括鼠标和键盘的控制。通过声明基类、创建窗体实现类以及定义鼠标键盘按键,逐步引导读者理解和应用引擎的输入事件处理。
摘要由CSDN通过智能技术生成

简介

本序列由澳大利亚的一个游戏引擎爱好者整理制作,使用了前瞻的语言技术,
经常多次的修改制作,一个个小的知识点贯通,非常具有引导学习意义!

Bilibili站转载学习,非个人研究,鸣谢!

原作者Github
Bilibili直达链接
YouTube直达链接


#1 基本的输入操作,鼠标,键盘
#2 声明基类,方便后续拓展和修改
#3 添加基于Window的窗体实现类
#4 添加鼠标键盘的按键定义
#5 测试按键和输入事件


#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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值