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
'windowAPI' 카테고리의 다른 글
WindowApi 6강 - range기반 for문의 주의점 (0) | 2024.11.23 |
---|---|
WindowAPi 5강 - SceneManager (0) | 2024.11.19 |
WinAPI 4강 - KeyManager (0) | 2024.11.19 |
windowAPI - 3일차 double buffering (0) | 2024.11.18 |
WindowAPI 2일차 - 비동기 입력 및 싱글톤 (0) | 2024.11.18 |