从零开始的openGL--cs游戏(6)Input类

Input类主要解决游戏中的输入

#ifndef Input_H
#define Input_H
enum class Key
{
	W = 0,
	A = 1,
	S = 2,
	D = 3,
	Mouse1 = 4,
	Mouse2 = 5,
	Space = 6,
	Shift = 7,
	R = 8,
};
class Input
{
private:
	bool _keys[9]{ false };
	void Check(Key key, bool newValue);
public:
	static Input* Instance;
	Input();
	void Update();
	bool KeyIsDown(Key key);

};
#endif
------------------
#include "Input.h"
#include "Window.h"
#include "EventCenter.h"
Input* Input::Instance = nullptr;
Input::Input()
{
	Input::Instance = this;
}

void Input::Update()
{
	if (glfwGetKey(Window::Instance->window_ptr, GLFW_KEY_ESCAPE))
	{
		glfwSetWindowShouldClose(Window::Instance->window_ptr, true);
	}
	Check(Key::A, glfwGetKey(Window::Instance->window_ptr, GLFW_KEY_A));
	Check(Key::W, glfwGetKey(Window::Instance->window_ptr, GLFW_KEY_W));
	Check(Key::S, glfwGetKey(Window::Instance->window_ptr, GLFW_KEY_S));
	Check(Key::D, glfwGetKey(Window::Instance->window_ptr, GLFW_KEY_D));
	Check(Key::Mouse1, glfwGetKey(Window::Instance->window_ptr, GLFW_MOUSE_BUTTON_LEFT));
	Check(Key::Mouse2, glfwGetKey(Window::Instance->window_ptr, GLFW_MOUSE_BUTTON_RIGHT));
	Check(Key::Space, glfwGetKey(Window::Instance->window_ptr, GLFW_KEY_SPACE));
	Check(Key::Shift, glfwGetKey(Window::Instance->window_ptr, GLFW_KEY_RIGHT_SHIFT));
}

bool Input::KeyIsDown(Key key)
{
	return _keys[(int)key];
}

void Input::Check(Key key, bool newValue)
{
	if (_keys[(int)key] != newValue)
	{
		if (newValue)
			EventCenter::Instance->Invoke<Key>("KeyDown", key);
		else
			EventCenter::Instance->Invoke<Key>("KeyUp", key);
		_keys[(int)key] = newValue;
	}}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值