반응형 WinAPI16 [winAPI 20] Tool 이제 Tool 씬을 작업해보도록 하겠다. 타일을 이용해 맵을 사용하는데 필요한 씬이다. 일단 기존 씬 매니저에서 START 씬이 아닌 TOOL 씬으로 진입하도록 하겠다. // SceneManager.cppvoid SceneManager::init(){ // .... currScene = arrScene[(UINT)SCENE_TYPE::TOOL]; // 수정 currScene->Enter();} 이제 Tile 클래스를 사용할 것인데 아래의 텍스쳐를 이용할 것이다. 보통 타일은 한 변의 크기가 64비트로 되어있는 것을 자주 사용한다. // define.h#define TILE_SIZE 64 // New!!enum class GROUP_TYPE { DEFAULT, TILE, // New!! PLAY.. 2024. 6. 11. [winAPI 16] Scene & Object 씬 전환 (화면 전환) 씬 변경을 구현해보자. 씬 전환은 씬 관리자가 관리를 해주어야 하지 않을까?씬 변경 또한 이전 프레임과 다음 프레임의 장면이 다르기에 이벤트 발생을 해서 처리해주어야 한다. 일단 새로운 씬을 하나 만들자. // Scene_Tool.h#pragma once#include "Scene.h"class Scene_Start : public Scene {public: Scene_Start(); ~Scene_Start(); virtual void Enter(); virtual void Exit();};// Scene_Tool.cpp#include "pch.h"#include "Scene_Tool.h"#include "KeyManager.h"Scene_Tool::Scene_Tool(){.. 2024. 6. 10. [winAPI 15] Event Manager 저번 시간에 설명했듯 이번 포스팅에선 이벤트 관리자를 만들어보도록 하겠다.그 전에 저번 시간에 Object에 이름 변수(strName)를 넣어주었는데 그와 관련된 인터페이스 함수를 작성하도록 한다. // Object.h // 이름 관련 함수 설정 void SetName(const wstring& _str) { strName = _str; } const wstring& GetName() { return strName; } 본격적인 EventManager 클래스를 작성하도록 하자. 일단 이벤트 타입에는 어떤 것이 있을까? 이벤트는 어떠한 코드 기점으로 이전 프레임에는 없었는데 다음 프레임에는 생기는 경우를 의미한다. 우리의 프로그램에선 미사일 생성이 해당한다. (이전 프레임에는 없었는데 다음 프레임에는 생.. 2024. 6. 10. [winAPI 14] Collider(3) Collider 충돌체마다 아이디를 고유로 주려고 하는데 만약 객체가 복사 되어 생성되는 경우라면 어떻게 해야 할까? 기본 복사 생성자는 그대로 복사해주기 때문에 ID가 중복될 수 있음. 이는 우리가 구현하고자 하는 목표에 위배되기 때문에 깊은 복사 필요가 필요하다. // Collider.hclass Object; class Collider {private: static UINT nextID; Object* owner; Vec2 offsetPos; Vec2 finalPos; Vec2 scale; UINT iID; UINT col;public: Collider(); Collider(const Collider& _ori); // 복사생성자 ~Collider(); Collider& operator =.. 2024. 6. 9. [winAPI 13] Collider(2) 갤러그 같은 게임에서의 플레이어 충돌 박스는 보통 안쪽으로 되어, 미사일이 날라와도 피할 수 있게 구현되기 때문에 아래의 사진같이 수정하도록 하겠다. 추가로 몬스터에도 충돌 박스를 그리는 작업을 진행하였다. // Player.cpp 수정Player::Player() : tex(nullptr){ // Texture Loading tex = ResManager::Instance()->LoadTexture(L"PlayerTex", L"Texture\\Player.bmp"); CreateCollider(); // 충돌 필요한 애들 다 넣어주기. GetCollider()->SetOffsetPos(Vec2(0.f, 10.f)); // 수정 GetCollider()->SetScale(Vec2(40.f, 50.f)).. 2024. 6. 8. [winAPI 12] Collider(1) 충돌 처리를 해보장..게임에서 충돌은 매우 필수적인 부분이다. 충돌은 단순히 부딪쳤다는 하나의 사실을 구현하는 것이 아니라 여러 조건이 필요하다. 아래에서 이 조건에 따라 세 가지 이벤트로 나눌 것이다. 오브젝트에 충돌이 필요한 것이 있고, 아닌 경우(배경, UI 등)가 있다. 오브젝트 내에서 Collider 와 Non-Collider로 나누어 상속을 사용해 구현하면 확장성이 떨어진다. Non-Collider 중에서 일부만 충돌이 필요한 경우가 생기면 구조를 다 뜯어 고쳐야 한다는 것. 그래서 상속 구조의 계층 구조가 깊다면(상속-상속-상속...) 이런 부분에서 문제가 생길 확률이 높다. 이런 멤버는 항상 갖고 있되 필요하면 쓰고, 아니면 안 쓰도록 구현하면 된다. 이런 애들을 component라고 분.. 2024. 6. 6. [winAPI 11] Resource Manager 리소스 매니저를 만들어보자. // Resource.h#pragma onceclass Texture;class ResManager { SINGLE(ResManager);private: map mapTex;public: Texture* LoadTexture(const wstring& _key, const wstring& _path); Texture* FindTexture(const wstring& _key);};// Resource.cpp#include "pch.h"#include "ResManager.h"#include "PathManager.h"#include "Texture.h"ResManager::ResManager(){}ResManager::~ResManager(){ map::iterator ite.. 2024. 6. 6. [winAPI 10] Resource & Path Manager 지금까지는 단순히 도형만을 다루어봤다면 이제는 본격적으로 리소스를 활용해보자. 실제 게임에서는 이미지, 사운드 등 여러 리소스가 있고 이를 이용해 화면에 여러 장면을 그려 유저에게 보여준다. 우선 이 리소스가 기본적으로 가져야 할 데이터를 모아 Res클래스를 만들어준다 (부모격 클래스)리소스를 구별하기 위해 고유의 ID와 이 리소스가 어느 파일에 위치해 있는 지를 알려주어야 함으로 경로를 갖고 있어야 한다. // Res.h#pragma onceclass Res {private: wstring key; // 고유 ID wstring strRelativePath; // 리소스 상대 경로(폴더 내의 변하지 않는 경로)public: Res(); ~Res(); void SetKey(const wstring& .. 2024. 6. 6. [winAPI 09] 기초 수학 저번에 구현한 미사일을 만약 대각선으로 이동하려면? 더보기[ 참고 ] - 원주율 지름과 원의 둘레의 비율 - 3.14 라디안 : 180도- 1 라디안 : 57도쯤. 의미 → 반지름과 호의 길이가 같은 값 - 삼각함수 : 직각 삼각형에서의 밑변/빗변/높이의 비율 우리는 저번 시간에 위/아래의 방향으로 처리했다면, 이를 각도로 수정해 처리할 필요가 있다. // Missile.h#pragma once#include "Object.h"class Missile : public Object {private: float theta; // 방향을 각도로public: Missile(); ~Missile(); virtual void update(); virtual void render(HDC _hdc); void Se.. 2024. 6. 5. 이전 1 2 다음 728x90 반응형