Aurora Engine 游戏引擎入门 05(基本输入事件简单测试)


简介

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

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

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


#1、定义事件基类:Event
#2、派生事件:ApplicationEvent KeyEvent MouseMovedEvent
#3、简单测试一下


// Event.h
#pragma once

#include "Aurora/Core.h"

#include <string>
#include <functional>

namespace Aurora {
   
	// enum class C++11的强类型枚举
	// 多个枚举可以拥有相同的枚举类型
	// 简单定义所有相关输入的类型
	enum class EventType
	{
   
		None = 0,
		WindowClose, WindowResize, WindowFocus, WindowLostFocus, WindowMoved,
		AppTick, AppUpdate, AppRender,
		KeyPressed, KeyReleased,
		MouseButtonPressed, MouseButtonReleased, MouseMoved, MouseScrolled
	};

	// 事件类型
	// #define BIT(x) (1 << x) 将数据向右移
	enum EventCategory
	{
   
		None = 0,
		EventCategoryApplication = BIT(0),
		EventCategoryInput       = BIT(1),
		EventCategoryKeyboard    = BIT(2),
		EventCategoryMouse       = BIT(3),
		EventCategoryMouseButton = BIT(4)
	};

	// 宏定义,为避免写重复的代码
	// 如果一行写不下,在行末尾添加'\'
	// 在宏定义中 '#'是不经拓展的直接替换宏参数 '##'是拓展之后再进行连接
	// EventType::##type 编译展开实例(WindowClose):EventType::##WindowClose -> EventType::WindowClose
	// \#type 编译直接替换成WindowClose
#define EVENT_CLASS_TYPE(type) static EventType GetStaticType() {
      return EventType::##type; } \
                               virtual EventType GetEventType() const override {
      return GetStaticType(); } \
							   virtual const char* GetName() const override {
      return #type; }
	// category 不需要替换符进行替换,因为category默认是int类型
	// 上面的宏定义的是一种type
#define EVENT_CLASS_CATEGORY(category) virtual int GetCategoryFlags() const override {
      return category; }

	// 定义事件基类
	class AURORA_API Event
	{
   
		// 声明改类拥有EventDispatcher的访问权限
		friend class EventDispatcher;
	public:
		// virtual 是C++的虚方法,可以当前实现,可以子类型实现
		// 当虚方法后面添加了'=0',这是定义纯虚方法,当前不能实现,必须派生类来实现
		// 如果一个方法后面添加 const 表示这个方法不会修改类里面的数据,进行编译优化
		virtual EventType GetEventType() const = 0;
		virtual const char* GetName() const = 0;
		virtual int GetCategoryFlags
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值