KeyManager

김태훈·2024년 1월 8일
0

Win32API

목록 보기
8/24
post-custom-banner

변수 셋팅

winddow key 값을 초기화한 순서대로
enum class에서 똑같은 순서로 key를 초기화 함으로써
KEY STATE를 자료형으로 한 vector의 인덱스가 곧
key값으로 동일시 하게 만듦

struct tkeyinfo
{

	KEY_STATE eState;//키의 상태값
	bool bPrevPush;//이전 프레임에 눌렸는지 여부
};



class CKeyMgr
{
	SINGLE(CKeyMgr)

private: vector<tkeyinfo>m_veckey;
//이 벡터의 인덱스 순서를 enum class의 멤버들 순으로 생각하면 된다.
};

update

void CKeyMgr::update()
{
	//윈도우가 focus된 상태에서만 키 업데이트 
	HWND Hwnd = GetFocus();
	if (nullptr != Hwnd)
	{
		for (int i = 0; i < (int)KEY::LAST; ++i)
		{   
			if (GetAsyncKeyState(g_arrVK[i]) & 0x8000)//키가 눌려 있다
			{	
				if (m_veckey[i].bPrevPush)//전 프레임에 눌러져 있었다면
				{
					m_veckey[i].eState = KEY_STATE::HOLD;
				}
				else
				{
					m_veckey[i].eState = KEY_STATE::TAP;
				}
				m_veckey[i].bPrevPush = true;
			}
			else
			{
				if (m_veckey[i].bPrevPush)//전 프레임에 눌러져 있었다면
				{
					m_veckey[i].eState = KEY_STATE::AWAY;
				}
				else
				{
					m_veckey[i].eState = KEY_STATE::NONE;
				}
				m_veckey[i].bPrevPush = false;
			}
		}
	}


profile
복습을 위한 핵심 내용 및 모작
post-custom-banner

0개의 댓글