WIN32API FrameWork/한단계씩 직접 구현

21. 총알 발사하기 / 목표물까지의 각도 구하기

2022. 5. 20. 13:25

https://hyrule.tistory.com/111 

 

*** 공부 방법 ***

1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처

hyrule.tistory.com

 


class CBullet

< 만들어보기 > 

- 총알 클래스를 생성한다.

-- 구현이 매우 간단하다. 생성된 위치에서 지정된 방향으로 지정된 속도만큼 이동해주면 끝이기 때문이다.

-- 충돌 처리는 나중에 아예 충돌만 처리하는 클래스를 만들어 처리할 것이다. 일단 충돌이 없더라도 맛만 보자.

 

--- 화면을 벗어나면 객체를 삭제하는 기능

--- 총알을 생성했는데, 방향과 속도를 지정해주지 않으면 에러 메시지를 발생시키거나 게임을 종료하는 기능

 

더보기
//Bullet.h

#pragma once

#include "../GameInfo.h"
#include "GameObject.h"

class CBullet :
    public CGameObject
{
    friend class CScene;

private:
    float m_Speed;
    Vector2 m_Dir;
    float m_Distance;
    bool m_isSet;
    

protected:
    CBullet();
    CBullet(const CBullet& Obj);
    virtual ~CBullet();

public:
    bool Init();
    void Update(float DeltaTime);
    void Render(HDC hDC, float DeltaTime);

    
    //창 밖을 넘어가면 파괴(임시)
    bool DestroyCheck();

    void SetSpeedDir(float _x, Vector2 Dir)
    {
        m_isSet = true;

        m_Speed = _x;
        m_Dir = Dir;
    }
};

 

//Bullet.cpp


#include "Bullet.h"

CBullet::CBullet()
{
}

CBullet::CBullet(const CBullet& Obj) :
	CGameObject(Obj),
	m_Dir(Obj.m_Dir),
	m_Speed(Obj.m_Speed),
	m_Distance(Obj.m_Distance)
{
}

CBullet::~CBullet()
{
}

bool CBullet::Init()
{
	m_Speed = 100.f;
	m_Distance = 0.f;

	SetSize(50.f, 50.f);
	SetPivot(0.5f, 0.5f);
	

	return true;
}

void CBullet::Update(float DeltaTime)
{

	//파괴 조건이 만족되면 총알 제거
	//거리를 벗어났거나, 총알 기본세팅을 하지 않았다면 그냥 제거
	if (DestroyCheck() || !m_isSet)
	{ 
		SetActive(false);
	}
		


	m_Distance += m_Speed * DeltaTime;



	m_Pos += m_Dir * m_Speed * DeltaTime;


}

void CBullet::Render(HDC hDC, float DeltaTime)
{


	Vector2 RenderLeftTop = m_Pos - (m_Size * m_Pivot);

	Ellipse(hDC, (int)RenderLeftTop.x,
		(int)RenderLeftTop.y,
		(int)(RenderLeftTop.x + m_Size.x),
		(int)(RenderLeftTop.y + m_Size.y));
}

bool CBullet::DestroyCheck()
{
	if (m_Distance >= 1000.f)
		return true;

	return false;
}

 

//클래스 수정, 변경
class CMonster

- 몬스터가 왼쪽으로 쭉 나아가는 총알을 발사한다

 

- 마찬가지로, 발사방법도 어렵지 않다.

-- 일정 시간마다 총알을 생성하고, 

-- 총알의 생성 위치와 방향을 지정해주면 되기 때문이다. 

 

더보기
//Monster.h 수정/변경사항

private:
//위는 총알 쿨타임 지정, 아래는 총알 쿨타임 체크용 변수
	float m_BulletDuration;
	float m_BulletDurationTimer;

 

//Monster.cpp 수정/변경사항

//추가 포함
#include "Bullet.h"
#include "../Scene/SceneManager.h"


//복사 생성자도 추가
CMonster::CMonster(const CMonster& Obj):
	CCharacter(Obj),
	m_BulletDuration(Obj.m_BulletDuration),
	m_BulletDurationTimer(Obj.m_BulletDurationTimer)
{
}


//초기화 메소드 추가사항
bool CMonster::Init()
{
	m_Dir = Vector2(0.f, 1.f);
	m_Speed = 400.f;
	m_BulletDuration = 1.f;
	m_BulletDurationTimer = 0.f;

	//...이외의 코드들...

	return true;
}

//업데이트 메소드 추가사항
void CMonster::Update(float DeltaTime)
{

	//
	//...이외의 코드들...//
	//

	m_BulletDurationTimer += DeltaTime;
	if (m_BulletDurationTimer > m_BulletDuration)
	{
		CBullet* Bullet = CSceneManager::GetInst()->GetScene()->CreateObject<CBullet>("Bullet");

		Bullet->SetSpeedDir(1000.f, Vector2(-1.f, 0.f));

		Bullet->SetPos(m_Pos.x, m_Pos.y);
		
		m_BulletDurationTimer = 0.f;
	}
	
}

이렇게 출력되면 성공
GameFrameworkStepbyStep_21_Bullet, Monster.zip
4.09MB

저작자표시 (새창열림)

'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글

23. 플레이어를 향해 총을 쏘는 몬스터  (0) 2022.05.21
22. 특정 목표까지의 각도 구하기  (0) 2022.05.21
20. (활용)몬스터 만들기  (0) 2022.05.20
19. Input 입력 구조 설계 2  (0) 2022.05.20
18. Input 입력 구조 설계 1  (0) 2022.05.19
'WIN32API FrameWork/한단계씩 직접 구현' 카테고리의 다른 글
  • 23. 플레이어를 향해 총을 쏘는 몬스터
  • 22. 특정 목표까지의 각도 구하기
  • 20. (활용)몬스터 만들기
  • 19. Input 입력 구조 설계 2
hyrule
hyrule
hyrule
C++ 프로그래밍 공부
hyrule
전체
오늘
어제
  • 분류 전체보기 (205)
    • C++기초 (50)
    • WIN32API FrameWork (109)
      • 한단계씩 직접 구현 (82)
      • 원본 (15)
      • 코드별 설명 개별저장(검색용) (12)
    • 자습 (21)
    • C++ TIPS (11)
    • 연습 노트 (3)
    • ETC (6)
    • DX2D StarCraft 모작 (1)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • Windows 11
  • 스타크래프트
  • notion
  • C++
  • hello
  • Tistory

최근 댓글

최근 글

hELLO · Designed By 정상우.
hyrule
21. 총알 발사하기 / 목표물까지의 각도 구하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.