WIN32API FrameWork/한단계씩 직접 구현

20. (활용)몬스터 만들기

hyrule 2022. 5. 20. 13:21

https://hyrule.tistory.com/111 

 

*** 공부 방법 ***

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

hyrule.tistory.com


- 플레이어 클래스의 코드를 참고하여 몬스터 클래스를 생성한다.

 

- 화면 위아래로 움직이는 몬스터를 렌더링해보자.

 

- 화면 끝에 부딪히면 반대로 이동한다.

 

- 이미 전반적인 기능은 다 구현해놓았기 때문에 금방 만들 수 있다.

 

- 정말 안되겠다 싶은경우에만 코드 확인

더보기

* Monster 클래스는 게임오브젝트 안에 생성해야 한다!

//Monster.h

#pragma once

#include "../GameInfo.h"
#include "Character.h"

class CMonster : public CCharacter
{
	friend class CScene;

private:
	Vector2 m_Dir;
	float m_Speed;

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

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

};

 

//Monster.cpp

#include "Monster.h"

CMonster::CMonster()
{
}

CMonster::CMonster(const CMonster& Obj):
	CCharacter(Obj)
{
}

CMonster::~CMonster()
{
}

bool CMonster::Init()
{
	m_Dir = Vector2(0.f, 1.f);
	m_Speed = 400.f;

	SetPos(1000.f, 500.f);
	SetSize(100.f, 100.f);
	SetPivot(0.3f, 0.7f);

	return true;
}

void CMonster::Update(float DeltaTime)
{
	if (m_Pos.y - (m_Size.y * m_Pivot.y) <= 0)
		m_Dir *= -1.f;
	else if (m_Pos.y + (m_Size.y * m_Pivot.y) >= 720)
		m_Dir *= -1.f;


	m_Pos += m_Dir * m_Speed * DeltaTime;


}

void CMonster::Render(HDC hDC, float DeltaTime)
{
	Vector2 RenderLT = Vector2(m_Pos.x - (m_Size.x * m_Pivot.x),
		m_Pos.y - (m_Size.y * m_Pivot.y));

	Rectangle(hDC, (int)RenderLT.x, (int)RenderLT.y,
		(int)(RenderLT.x + m_Size.x), (int)(RenderLT.y + m_Size.y));

}

 

* 클래스 안에서 몬스터 로직 구현을 완료했으면, CMainScene에서 생성 메소드를 등록하기만 하면 끝.

 - 나머지는 알아서 자동으로 관리된다

//MainScene.cpp

bool CMainScene::Init()
{
	CreateObject<CPlayer>("Player");
    
    //이거 추가
	CreateObject<CMonster>("Monster");

	return true;
}

 


결과는 이것과 비슷하게만 나오면 된다!
GameFrameworkStepbyStep_20_Monster.zip
1.90MB