Windows API

# 총알 4방향 발사

HYuk 2021. 5. 31. 23:46
728x90

if (GetAsyncKeyState(VK_LEFT) & 0x8000) 를 이용하여 키보드 입력값을 받을 수 있다.

 

키보드 입력값은 GetAsyncKeyState(키값) 을 넣어주면된다.

 

키값은

List of Virtual Key Codes (kbdedit.com)

 

List of Virtual Key Codes

List of Virtual Key Codes Following is a full list of VK codes that can be assigned to physical keys ("scan codes") in the Low-level editor. The list is divided in two categories: "Mappable" codes, to which Unicode characters can be assigned in the High-le

www.kbdedit.com

여기 정리되어 있다.

 

	if (GetAsyncKeyState(0x57) & 0x8000) // W
		m_pBullet->emplace_back(Create_Bullet('w'));
	if (GetAsyncKeyState(0x41) & 0x8000) // A
		m_pBullet->emplace_back(Create_Bullet('a'));
	if (GetAsyncKeyState(0x53) & 0x8000) // S
		m_pBullet->emplace_back(Create_Bullet('s'));
	if (GetAsyncKeyState(0x44) & 0x8000) // D
		m_pBullet->emplace_back(Create_Bullet('d'));

플레이어의 Update 함수에 다음과 같이 총알을 만들고 총알에 속성 ('w', 'a', 's', 'd')의 속성을 부여하여,

 

Bullet 클래스에서 다음과 같이 Render 해주면 된다

void CBullet::Update()
{

	if (m_ch == 'a')
		m_tInfo.fX -= m_fSpeed; // 왼
	if (m_ch == 'w')
		m_tInfo.fY -= m_fSpeed; // 위
	if (m_ch == 'd')
		m_tInfo.fX += m_fSpeed; // 오
	if (m_ch == 's')
		m_tInfo.fY += m_fSpeed; // 아래

	Update_Rect();
}

 

방향으로 발사가 잘 되지만,

WA를 눌렀을 때, 대각선으로 발사가 안되기 때문에

각 키를 눌렀을 때, Bullet 생성이 아니라 속도를 적용시키는 방식으로 구현하면 좋을 것 같다.

 

0x8000 이 값은 다음 표에 따라 바꿔 쓸 수 있다.

반환값 설명
0x0000 이전에 누른적이 없고 호출 시점에서 안누른 상태
0x8000 이전에 누른적이 없고 호출 시점에서 누른 상태
0x8001 이전에 누른적이 있고 호출 시점에서 안누른 상태
0x0001 이전에 누른적이 있고 호출 시점에서 누른 상태

 

728x90

'Windows API' 카테고리의 다른 글

리스타 구현 스윙 구현  (0) 2021.06.18
#라인타기  (0) 2021.06.11
#몬스터 추적 (feat. 유도탄)  (0) 2021.06.10
# 삼각함수로 방향 전환  (0) 2021.06.02
# 충돌처리  (0) 2021.06.01