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

📄 md_input.h

📁 我用MDEngine写的游戏
💻 H
字号:
//********************************************************************
//						MD 引擎 控制器 部件的定义
//		Powered by @J--S Studio			Johnhans		2002.7.15
//********************************************************************

#ifndef MD_INPUT_H
#define MD_INPUT_H

#ifdef MDENGINE_EXPORTS
#define MDENGINE_API __declspec(dllexport)
#else
#define MDENGINE_API __declspec(dllimport)
#endif

#define DIRECTINPUT_VERSION 0x0700

#include <dinput.h>

#define INPUT_NONE		0
#define	INPUT_KEYBOARD	1
#define INPUT_MOUSE		2
#define INPUT_JOYSTICK	4

#define KEY_NONE		0	// 没有按键被按下

#define KD_ALWAYS		0
#define KD_DOWN			1
#define KD_UP			2

#define DIM_X			0
#define DIM_Y			1
#define DIM_Z			2

#define JOY_OFFSET		300
#define DIJ_X			80 + JOY_OFFSET
#define DIJ_Y			81 + JOY_OFFSET
#define DIJ_Z			82 + JOY_OFFSET
#define DIJ_RX			83 + JOY_OFFSET
#define DIJ_RY			84 + JOY_OFFSET
#define DIJ_RZ			85 + JOY_OFFSET
#define DIJ_SLIDER0		86 + JOY_OFFSET
#define DIJ_SLIDER1		87 + JOY_OFFSET
#define DIJ_ALX			90 + JOY_OFFSET
#define DIJ_ARX			91 + JOY_OFFSET
#define DIJ_ALY			92 + JOY_OFFSET
#define DIJ_ARY			93 + JOY_OFFSET
#define DIJ_ALZ			94 + JOY_OFFSET
#define DIJ_ARZ			95 + JOY_OFFSET

#define DIK_ENTER		DIK_RETURN
#define DIK_LCTRL		DIK_LCONTROL
#define	DIK_RCTRL		DIK_RCTRL

class MDENGINE_API CMD_Input
{
public:
	CMD_Input();
	virtual ~CMD_Input();
	bool Create(HWND hwnd, BYTE input);
	void Update(void);
	bool IsInput(WORD btn,BYTE mode);
	WORD GetInput(BYTE mode,bool bAxis,bool bjoypri);
	void Acquire(bool acquire);
	void Free();
	LPDIRECTINPUT7 *GetDIObject(void){ return &m_lpDI; }

private:
	LPDIRECTINPUT7				m_lpDI;		// DINPUT设备
	HWND						m_hWnd;		// 窗口句柄

//鼠标控制器
public:
	bool CreateMouse(DWORD dwFlags=DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
	void FreeMouse(void);
	void AcquireMouse(bool acqm);
	bool UpdateMouse(void);
	int	 GetMouseLXY(BYTE ax);
	bool IsMouseButtonDown(BYTE btn,BYTE mode);
	LPDIRECTINPUTDEVICE7 *GetMouseObject(void){ return &m_lpMouse; }

private:
	LPDIRECTINPUTDEVICE7		m_lpMouse;	// 鼠标设备
	DIMOUSESTATE2				*m_lpdimsp;	// 前次鼠标状态
	DIMOUSESTATE2				*m_lpdimsn;	// 当前鼠标状态

//键盘控制器
public:
	bool CreateKeyboard(DWORD dwFlags=DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
	void FreeKeyboard(void);
	void AcquireKeyboard(bool acqm);
	bool UpdateKeyboard(void);
	bool IsKeyPress(DWORD key,BYTE mode);
	BYTE GetKeyDown(BYTE mode,LPBYTE buf,int &Element);
	LPDIRECTINPUTDEVICE7 *GetKeyboardObject(void){ return &m_lpKeyboard; }

private:
	LPDIRECTINPUTDEVICE7		m_lpKeyboard;// 键盘设备
	BYTE						*m_lpdiksp;	 // 前次鼠标状态
	BYTE						*m_lpdiksn;	 // 当前鼠标状态

//游戏手柄控制器
public:
	bool CreateJoystick(DWORD dwFlags=DISCL_EXCLUSIVE|DISCL_FOREGROUND);
	void SetDeadzone(int ratio=5000){ m_Deadzone=ratio; }
	void FreeJoystick(void);
	void AcquireJoystick(bool acqm);
	bool UpdateJoystick(void);
	int  GetJoystickLXY(DWORD ax);
	bool IsJoyButtonDown(DWORD btn,BYTE mode);
	WORD GetJoyButtonDown(BYTE mode,LPWORD buf,int &Element,bool bAxis=false);
	LPDIRECTINPUTDEVICE7 *GetJoystickObject(void){ return &m_lpJoystick; }

private:
	LPDIRECTINPUTDEVICE7		m_lpJoystick;// 游戏手柄设备
	GUID						guidJoystick;// 游戏手柄设备ID
	DIJOYSTATE					*m_lpdijsp;	 // 前次手柄状态
	DIJOYSTATE					*m_lpdijsn;	 // 当前手柄状态
	int							m_Deadzone;	 // 手柄方向杆的无效区域
};

#endif

⌨️ 快捷键说明

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