windowAPI

WinApi 7강 - 꼬물꼬물 총알 만들기

rimugiri 2024. 11. 23. 03:56
728x90

지금까지 배운 내용을 사용하여 구불구불 거리는 총알을 한번 발사해 보자

 

1. 총알 만들기 CObject를 상속받아서 총알을 만들어 준다

총알은 위로 발사되며 cos을 사용하여 구불거림을 표현한다

#pragma once
#include "CObject.h"

class CBullet
	: public CObject
{
private:
	float m_fTheta;
	float m_fDirection;
public:
	float GetTheta() { return m_fTheta; }
	void SetTheta(float _fTheta) { m_fTheta = _fTheta; }
public:
	void update();
	void render(HDC _hdc);
	void SetDirection(bool _up) {
		if (_up)
			m_fDirection = -1.0f;
		else
			m_fDirection = 1.0f;
	}
public:
	CBullet();
	~CBullet();
};

void CBullet::update()
{
	Vector2 vPos = GetPos();
	float fTheta = GetTheta();
	fTheta += 10.f * DELTATIME;

	vPos.x += 100.f * cosf(fTheta) * DELTATIME;
	vPos.y += 100.f * DELTATIME * m_fDirection;

	SetTheta(fTheta);
	SetPos(vPos);
}

void CBullet::render(HDC _hdc) {
	Vector2 vPos = GetPos();
	Vector2 vSize = GetSize();

	Ellipse(_hdc,
		vPos.x - vSize.x / 2,
		vPos.y - vSize.y / 2,
		vPos.x + vSize.x / 2,
		vPos.y + vSize.y / 2);

 

 

2. 발사 : 플레이어 쪽에서 space키를 눌렀을경우 총알을 발사한다.

여기에서 for문에 대한 error가 발생했었는데 이는 index for문으로 해결했었다

void CPlayer::update()
{
	Vector2 vPos = GetPos();

	if (KEYHOLD(KEY::W)) {
		vPos.y -= 100.f * DELTATIME;
	}
	if (KEYHOLD(KEY::S)) {
		vPos.y += 100.f * DELTATIME;
	}
	if (KEYHOLD(KEY::A)) {
		vPos.x -= 100.f * DELTATIME;
	}
	if (KEYHOLD(KEY::D)) {
		vPos.x += 100.f * DELTATIME;
	}
	if (KEYDOWN(KEY::SPACE)) {
		CreateBullet(); 
	}

	SetPos(vPos);
}

void CPlayer::CreateBullet()
{
	CBullet* pBullet = new CBullet();
	pBullet->SetPos(GetPos());
	pBullet->SetSize(Vector2(10.f, 10.f));
	pBullet->SetDirection(true);

	CScene* pCurScene = CSceneManager::GetInstance()->GetCurScene();
	pCurScene->AddObject(GROUP_TYPE::DEFAULT, pBullet);
}

 

728x90