반응형 WinAPI16 [winAPI 08] Object 지금까지 작성한 Object 코드의 update함수는 테스트를 위한 코드이지 논리상 맞지 않는 코드이다. 이 Object 클래스는 앞으로 우리가 만들 여러 오브젝트들의 부모 클래스이다. 따라서 이 update를 수정하지 않으면 이를 상속 받아 만들어지는 여러 Object들은 현재 구현된 코드에 의해 WASD를 누를 경우 이동하게 된다. 즉 모든 오브젝트가 똑같은 일을 수행하게 된다. 오브젝트 클래스를 상속 받아 여러 오브젝트를 만들어야 하는데 씬의 update 호출 시 각 오브젝트가 개인적으로 갖고 있는 update를 실행시켜줘야 각자 할 일을 하지 않을까? 따라서 Object에 존재하는 update와 render함수는 가상 함수가 되어야 한다. // Object.hclass Object {pri.. 2024. 6. 5. [winAPI 07] Scene & Scene Manager 게임에는 여러가지 씬이 존재한다. 씬은 어떻게 구현될까?게임 내에는 수 많은 오브젝트가 존재하는데 이를 관리하는 것을 씬이라 볼 수 있다. - 씬 구조 만들기 여기서 오브젝트를 관리할 것인데 씬도 여러 가지 씬으로 나뉘기에 상속으로 구현된다. 씬에 존재하는 오브젝트를 여러 그룹으로 나눠 구별하기 위해 아래처럼 enum class를 사용한다.// define.h에 추가enum class GROUP_TYPE { DEFAULT, PLAYER, MISSTLE, MONSTER, END = 32,};// Scene.h 생성class Object; // 전방선언class Scene {private: vector arrObj[(UINT)GROUP_TYPE::END]; wstring strName;public: S.. 2024. 6. 4. [winAPI 06] Key Manager - 기존 키 입력 방식의 문제 우선 발생할 수 있는 첫 번째 상황은 A와 B 물체가 이동하는 게임에서 키 매니저가 없다면, 각 물체는 자신의 키 입력을 개별적으로 처리하게 된다. 그렇게 될 경우 키를 처리하는 수 백 번의 상황 중에 A 물체는 현재 프레임에서 이동을 처리하지만, B 물체는 다음 프레임에서 이동을 처리하는 경우가 생길 수 있다. 이는 유저의 입장에서 A 물체는 먼저 이동하고, B 물체는 약간의 지연 후에 이동하는 것처럼 보이게 된다. 두 번째 상황은 우리가 점프 게임을 한다고 가정하자. 짧게 점프할 때와 길게 점프를 누를 때 날라가는 폭과 거리가 다르게 설계하려고 한다면, 이를 어떻게 구현할 것인가? 현재 우리가 작업하는 구조는 매 순간순간 UPDATE 함수를 확인하고, 모든 업데이.. 2024. 6. 4. [winAPI 05] Double Buffering 지금까지 발생하고 있는 문제를 해결해보자.1. 물체를 움직였을 때 남는 잔상 문제는 매번 전체 픽셀을 무효화 하고 다시 그려주어야 한다. 2. 물체가 많이 생성할 때 깜빡 거리는 문제는 더블 버퍼링을 이용한다. - 화면 전체 무효화 일단 전체 화면 크기의 흰색 도형으로 그려주는 방법을 사용한다.void Core::Render() { // 화면 clear Rectangle(hDC, -1, -1, ptResolution.x + 1, ptResolution.y + 1); Vec2 vPos = obj.getPos(); Vec2 vScale = obj.getScale(); Rectangle(hDC, int(vPos.x - vScale.x / 2.f), int(vPos.y - vScale.y / 2.f.. 2024. 6. 4. [winAPI 04] Timer 저번 시간에 작성했던 프로그램을 토대로 게임을 만든다고 했을 때 두 가지 문제가 있을 수 있다 1. 컴퓨터가 느린 사람과 빠른 사람의 이동 속도가 달라질 수 있다. 즉 CPU의 속도에 따라 처리 속도가 달라져 1초 당 이동 거리 속도가 다른 문제가 발생한다. 2. 정수 단위로 이동하고 있어서 1초에 엄청나게 많은 거리를 이동하고 있다. 우선 실수 단위로 이동 시켜 보도록 하자 기존 Object class에서 POINT 객체로 되어 있던 것을 vec2 라는 객체로 만들겠다. 여기서 vec2는 우리가 아는 수학적 2차원 개념이다. // new header file : struct.h #pragma once struct Vec2 { float x; float y; Vec2() :x(0.f) ,y(0.f) {}.. 2024. 4. 9. [winAPI 03] Core class & Singleton 코어(Core)는 말그대로 중심이라는 의미로 주요한 기능을 제공하고 전반적인 프로그램 구조를 정의하며 싱글톤(singleton)은 클래스의 인스턴스가 단 하나만 생성되도록 보장하는 소프트웨어 패턴이다. 우리가 프로그램을 만들 때 코어 클래스의 객체가 중심이 될 것이기에 이 객체는 여러 개일 수가 없어 싱글톤 패턴으로 구현하고자 한다. - Core class ( 동적할당 Heap 영역 사용 ) // Core.h class Core { private: static Core* pInst; Core(); ~Core(); public: static Core* Instance() { if (pInst == nullptr) { return new Core; } return pInst; } static void Rel.. 2024. 4. 8. [winAPI 02] 마우스로 사각형 그리기 & 게임 메세지 처리 구조 * 물체가 많이 존재한다면? 물체 마다 정보가 존재해야 하며 항상 동일하다고 생각할 수 없고, 조금만 움직여도 전체를 다시 그려야 할까? 게임은 '렌더링' 이라는 것이 존재한다. 여기서 렌더링은 그리고 그리는 반복의 연속이라 생각하자. 흔히 프레임이라고 알고 있는 개념 맞음 ( 1초에 60번을 그리는 게 기본 ) → 즉 얼마나 깔끔하게 그려주는 가가 관건이 됨 아래의 예제를 보자 - 마우스로 사각형 그리기 #include using std::vector; struct tObjInfo { POINT objPos; POINT objScale; }; vector vecInfo; POINT ptLT; POINT ptRB; bool act = false; // WndProc case WM_PAINT: { PAIN.. 2024. 4. 8. 이전 1 2 다음 728x90 반응형