⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asl_input.h

📁 泡泡堂单机版(含ASL游戏引擎源码 泡泡堂单机版(含ASL游戏引擎源码
💻 H
字号:
//-----------------------------------------------------------------------------
//
//    ____ Azure Star Game Engine 蓝星游戏引擎 ____
//
//    Copyright (c) 2006, 蓝星工作室
//    All rights reserved.
//
//    文件名称: asl_input.h
//    摘    要: 输入控制类定义
//
//    当前版本: 1.0
//    作    者: 汤  祺
//    创建日期: 2006-7-21
//
//-----------------------------------------------------------------------------

#ifndef ASL_INPUT_INCLUDE
#define ASL_INPUT_INCLUDE

#pragma once

#include "asl_utils.h"
#include <queue>

//-----------------------------------------------------------------------------
namespace ASL
{

// 取全局唯一实例
#define INPUT ASLInput::Instance()

// 功能键状态结构定义
struct ShiftState
{
	bool ssCtrl;
	bool ssShift;
	bool ssAlt;
};

// 鼠标按钮枚举定义
enum MouseButton
{
	mbLeft,
	mbRight,
	mbMiddle
};

//-----------------------------------------------------------------------------
// ASLInput 输入控制类定义
//     本类是简单的输入控制类, 提供处理键盘和鼠标输入的能力. 本类通过定时更新
//     维护一份键盘鼠标状态表. 用户可以随时取得当前的键盘鼠标状态.
//-----------------------------------------------------------------------------
class ASLInput
{

// 常量定义
private:
	static const int BUF_SIZE = 256;	// 键盘缓冲区大小

// 私有构造函数, 析构函数. 仅在Instance()函数中创建
private:
	ASLInput(void);
	~ASLInput(void);



// 公有函数
public:
	// 取全局唯一实例
	static ASLInput& Instance(void);

	// 初始化
	void Init(HWND hWnd) { m_hWnd = hWnd; }

	// 消息处理函数, 需在主窗口的消息处理函数中调用
	void MsgProc(UINT message, WPARAM wParam, LPARAM lParam);

	// 更新函数
	void Update(void);



// 按键函数
public:	
	// 指定键是否刚被按下(相对于上一次调用Update())
	bool IsKeyJustDown(DWORD dwKey)
	{ return (m_vKeyState[dwKey] & 0x80) && !(m_vKeyStateOld[dwKey] & 0x80); }

	// 指定键是否刚被松开(相对于上一次调用Update())
	bool IsKeyJustUp(DWORD dwKey)
	{ return !(m_vKeyState[dwKey] & 0x80) && (m_vKeyStateOld[dwKey] & 0x80); }

	// 取按键状态 若按下则返回true
	bool GetKeyState(DWORD dwKey) { return (m_vKeyState[dwKey] & 0x80) != 0; }

	// 取功能键状态
	ShiftState GetShiftState(void) { return m_ShiftState; }

	// 自上次调用Update()后被按下的键
	std::queue<DWORD> GetKeyDown(void) { return m_qKeyDownSave; }

	// 自上次调用Update()后被松开的键
	std::queue<DWORD> GetKeyUp(void) { return m_qKeyUpSave; }

	// 自上次调用Update()后得到的字符
	std::queue<char> GetChar(void) { return m_qCharSave; }



// 鼠标按钮函数
public:
	// 指定鼠标按钮是否刚被按下
	bool IsMouseJustDown(MouseButton mb);

	// 指定鼠标按钮是否刚被松开
	bool IsMouseJustUp(MouseButton mb);

	// 取鼠标按钮状态 若按下则返回true
	bool GetMouseState(MouseButton mb);

	// 取鼠标滚轮滚动数
	int  GetMouseWheel(void) { return m_nWheelSave; }
	


// 鼠标位置函数
public:
	// 取鼠标位置
	POINT GetMousePos(void) { return m_ptMousePos; }	

	// 取鼠标X坐标
	int GetMousePosX(void) { return m_ptMousePos.x; }
	
	// 取鼠标Y坐标
	int GetMousePosY(void) { return m_ptMousePos.y; }

	// 设置鼠标位置
	void SetMousePos(POINT pt);

	// 鼠标是否移动(相对于上一次调用Update())
	bool IsMouseMoved(void);



// 成员变量
private:
	HWND m_hWnd;						// 主窗口句柄
	BYTE m_vKeyState[BUF_SIZE];			// 键盘缓冲
	BYTE m_vKeyStateOld[BUF_SIZE];		// 前次键盘缓冲
	ShiftState m_ShiftState;			// 功能键状态
	POINT m_ptMousePos;					// 鼠标位置
	POINT m_ptMousePosOld;				// 前次鼠标位置

	std::queue<DWORD> m_qKeyDown;		// 被按下键队列
	std::queue<DWORD> m_qKeyUp;			// 被松开键队列
	std::queue<char> m_qChar;			// 字符队列
	std::queue<DWORD> m_qKeyDownSave;	// 保存的被按下键队列
	std::queue<DWORD> m_qKeyUpSave;		// 保存的被松开键队列
	std::queue<char> m_qCharSave;		// 保存的字符队列
	int m_nWheel;						// 鼠标滚轮滚动数
	int m_nWheelSave;					// 保存的鼠标滚轮滚动数

}; // ASLInput类定义结束

} // namespace ASL

#endif // ASL_INPUT_INCLUDE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -