WIN32API FrameWork/원본

WIN32API FrameWork/원본

220509_FrameWork_7-1_스킬 만들기

* 생성시킨 객체 주변을 회전하는 총알 n개를 만들어 보자 * 스킬 사용 버튼을 누를 시 회전 속도와 범위가 늘어난다. * LOL의 챔피언 '아우렐리온 솔'의 W스킬과 비슷함. //Class CRotatingBullet: public CGameObject //RotatingBullet.h #pragma once #include "GameObject.h" //소환한 클래스의 주변에 3개 생성되어 주변을 도는 총알 class CRotatingBullet : public CGameObject { friend class CScene; protected: CRotatingBullet(); CRotatingBullet(const CRotatingBullet& obj); virtual ~CRotatingBullet(..

WIN32API FrameWork/원본

220509_WIN32API_6-3_총알 발사 - 스킬 쿨타임 구현

1. 총알의 쿨타임을 저장할 '구조체'를 생성한다. 이 구조체에는 (float)총알의 쿨타임, (bool)현재 쿨타임에 진입했는지, (float)남은 쿨타임 시간 3가지 변수를 저장한다. 2. 이 쿨타임 구조체는 총알 발사 뿐만 아니라 스킬 시전에도 사용할 예정이므로, 이 스킬 쿨타임 구조체들을 저장할 배열(vector)을 생성한다. 3. 실제로 사용할 객체를 초기화할 때 구조체를 생성해 초기화( = {};) 하고, 쿨타임만 지정해 준다. cf)bool 타입은 초기화하면 false(0)이다. 4. 생성한 구조체를 배열에 삽입한다. 5. 스킬을 사용하면 쿨타입 진입 bool 변수를 true로 바꾸고, 남은 쿨타임 시간에 지정했던 쿨타임을 대입한다. 6. 이후 객체의 Update 함수 안에서 반복문을 통해 ..

WIN32API FrameWork/원본

220509_WIN32API_6-2_총알 발사 - 쿨타임 구현과 실제 발사

1. GameObject class를 상속받는 총알 클래스를 만들어 준다. 2. 총알을 발사할 객체에서 총알 발사 입력이 들어오면 총알을 생성한다. 3. 총알을 생성하고, 방향과 속도를 지정해 준다. 지난 번에 Player 객체를 구현할 때 총구의 방향은 이미 계산을 했었다. //총구가 향하는 방향 구하기 m_Dir; m_Dir.x = cosf(DegreeToRadian(m_GunAngle)); m_Dir.y = sinf(DegreeToRadian(m_GunAngle)); m_GunPos.x = m_Pos.x + m_Dir.x * m_GunLength; m_GunPos.y = m_Pos.y + m_Dir.y * m_GunLength; 총알은, 여기서 계산한 방향으로 나아가도록 생성해주면 된다. void ..

WIN32API FrameWork/원본

220509_WIN32API_6-1_총알 발사 - 총알 클래스 구현

1. GameObject class를 상속받는 총알 클래스를 만들어 준다. 2. 총알을 발사할 객체에서 총알 발사 입력이 들어오면 총알을 생성한다. 3. 총알을 생성하고, 방향과 속도를 지정해 준다. 1. GameObject class를 상속받는 총알 클래스를 만들어 준다. #pragma once #include "GameObject.h" class CBullet : public CGameObject { friend class CScene; protected: CBullet(); CBullet(const CBullet& obj); virtual ~CBullet(); virtual bool Init(); virtual void Update(float DeltaTime); virtual void Render..

WIN32API FrameWork/원본

220504_WIN32API_Framework_5-3_실제 Scene 만들고 실행(MainScene)

* 이제 각 Scene은 코드가 간단해진다. * Scene 별로 Init 함수에 생성할 게임오브젝트를 생성해 주면 끝 -> 각 Scene에서는 배치할 GameObject를 생성 -> SceneManager에서는 Scene을 생성 * 일단 작동하는 개체가 Player 뿐이므로 Player 객체를 생성해서 작동하는지 확인해 보자 * MainScene을 아래와 같이 만들어 준다. //Class CMainScene //MainScene.h #pragma once #include "Scene.h" class CMainScene : public CScene { friend class CSceneManager; protected: CMainScene(); virtual ~CMainScene(); public: boo..

WIN32API FrameWork/원본

220504_WIN32API_Framework_5-2_Class Scene

* Scene 클래스는 모든 개별 클래스의 최상위 부모 클래스이다. * 생성자와 소멸자를 protected로 선언하고, SceneManager만 frend class로 등록하여 SceneManager를 통해서만 처리할 수 있게 만들어 준다. class CScene { friend class CSceneManager; protected: CScene(); virtual ~CScene(); * 해당 씬에서 생성된 GameObject의 주소를 모두 담아놓을 list를 전방 선언한다. 일반 포인터 변수가 아닌 공유 포인터 클래스로 선언하여 메모리 릭을 방지해 준다. protected: std::list m_ObjList; * GameObject를 생성하는 데 사용되는 템플릿 함수 CreateObject를 선언 ..

WIN32API FrameWork/원본

220504_WIN32API_Framework_5-1_SceneManager

* Scene을 관리할 SceneManager 클래스를 싱글턴 패턴으로 미리 작성해놓은 매크로를 통해 선언한다. 하나의 SceneManager에서 Scene을 그때그때 바꿔 가며 실행할 것이다. DECLARE_SINGLETON(CSceneManager) * 실행되고 있는 Scene 주소를 담아놓을 포인터를 선언한다. private: //씬매니저에서 씬 하나를 관리. 씬은 단 하나만 들고있을 예정. class CScene* m_Scene; * 앞으로 모든 GameObject의 Update와 Render 함수 처리는 모두 SceneManager 클래스에서 시작한다. bool CSceneManager::Init() { //템플릿에 CMainScene을 넣어 CreateScene 함수를 통해 생성 CreateS..

WIN32API FrameWork/원본

220504_WIN32API_Framework_4_스마트 포인터(참조 카운트)

* 추가 정보: https://hyrule.tistory.com/95 SharedPtr, Reference Counting 구현과 이해 //Class CRef //Ref.h /* [스마트 포인터] * 파이썬 또는 자바의 경우 가비지 컬렉터라는 프로그램이 계속 작동함. - 댕글링 포인터들을 자동으로 청소 but 속도가 느림. * 스마트 포인터 - 공유 포인터 - hyrule.tistory.com 1. 참조 카운트 클래스 - Ref.h, Ref.cpp 2. 공유 포인터 클래스 - SharedPtr.h //Class CRef //Ref.h /* [스마트 포인터] * 파이썬 또는 자바의 경우 가비지 컬렉터라는 프로그램이 계속 작동함. - 댕글링 포인터들을 자동으로 청소 but 속도가 느림. * 스마트 포인터 -..

WIN32API FrameWork/원본

220503_WIN32API_3-3_조작에 따라 회전하는 총 만들기(삼각함수)

코사인과 사인함수 값을 조합시켜 활용하면, 총의 각도를 구할 수 있다. * Player.h * Player.cpp //Class Cplayer: public CCharacter //Player.h #pragma once #include "Character.h" class CPlayer : public CCharacter { public: CPlayer(); //상속할 것이므로 가상함수로 소멸자 선언 virtual ~CPlayer(); public: virtual bool Init(); virtual void Update(float DeltaTime); virtual void Render(HDC hDC, float DeltaTime); //충돌 함수는 별도로 구현할 것이므로 만들지 ..

WIN32API FrameWork/원본

220503_WIN32API_Framework_3-2_입력받은대로 캐릭터 이동

* WIN32API에서 플레이어를 출력하려면 HDC 인자가 필요하므로 Render() 함수에 인자로 넘겨주도록 추가해 주었음. - 상속받는 모든 자식 클래스도 변경해 줄것 virtual void Render(HDC hDC, float DeltaTime); * 최상위 클래스인 GameObject에 변수 추가 - 오브젝트의 위치를 나타내는 m_Pos - 오브젝트의 크기 m_Size - 오브젝트의 중심점을 잡을 수 있게 해주는 m_Pivot //Class CGameObject //GameObject.h #pragma once //Include/GameObject/GameObject.h -> Include/GameInfo.h 이므로 #include "../GameInfo.h" /* * 게임오브젝트: 상속구조로 ..

WIN32API FrameWork/원본

220503_WIN32API_Framework_3-1_Vector2 구조체와 연산 만들기

* 벡터2 구조체를 만들고, 관련 연산자들을 재정의해서 편의성 있게 사용 가능하도록 함 //Vector2.h #pragma once //프로그래밍에서 수학은 //손으로 푸는것이 중요한 게 아니라 이 수학 공식을 사용하면 어떻게 되는지 //정도만 알면 된다. #include //라디안 등 여러 곳에 원주율이 두루두루 쓰이므로 상수로 등록해 놓는다. const float PI = 3.141592f; struct Vector2 { float x, y; //아무것도 안넣으면 0으로 초기화 Vector2() : x(0.f), y(0.f) {} //두개의 값을 인자로 받으면 각각 x, y로 Vector2(float _x, float _y) : x(_x), y(_y) {} //한개의 값을 인자로 받으면 x, y 동일..

WIN32API FrameWork/원본

220502_WIN32API_Framework_3_GameObject 상속 구조 짜기

* 간단히 구조만 설계하는 단계. //Class CGameObject //GameObject.h #pragma once //Include/GameObject/GameObject.h -> Include/GameInfo.h 이므로 #include "../GameInfo.h" /* * 게임오브젝트: 상속구조로 설계할 예정. 게임오브젝트- 캐릭터- 플레이어- 나이트 - 아처 - 매지션 - ... - NPC- ... - ... - 몬스터- - 아이템 */ /* * 앞으로는 클래스가 매우 많아질 거라 추가적인 정리정돈이 필요하다. - GameObject 폴더를 만들어서 GameObject 관련 클래스들은 GameObject 폴더 안에 생성되게 할 예정 - Include 폴더 안으로 들어가서 GameObject 폴더..

hyrule
'WIN32API FrameWork/원본' 카테고리의 글 목록