League Of Legends - Link Select GAMEMING
본문 바로가기
반응형

전체 글76

[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.
[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.
[06~08주차] Non-Blocking 알고리즘 - LIST - SET : 아이템의 중복을 허용하지 않음 : 정렬되어 저장됨 (unordered_set이 아님) - 검색 효율 증가 : 삽입 삭제의 효율성을 위해 링크드리스트 구현 : 구현 ) add, remove, contains : 필드 ) 리스트에 저장되는 값  : 메서드 - add(x) : 집합에 x추가, 성공 시 true - remove(x) : 집합에서 x 제거, 성공 시 true - contains(x) : 집합에 x가 있다면 true  : 추가 구현 ) 보초 노드 - 검색 효율을 위해 항상 존재하는 Head(MAXINT)와 Tail노드(-MAXINT)를 갖도록 함   - 성긴 동기화 : 리스트는 하나의 잠금을 가짐 : 모든 매서드 호출은 이 잠금을 통해 Critical Section으로 진행됨 ( = .. 2024. 4. 25.
[05주차] 동기화 연산 & CAS - Lock-free 자료구조 : 여러 개의 쓰레드에서 동시에 호출했을 때에도 정해진 단위 시간마다 적어도 한 개의 호출이 완료되는 알고리즘  : Non-blocking이 보장되어야 함 : 알고리즘 내에 Lock이 있으면 당연히 Lock-free X, Lock이 없다고 해도 무조건 Lock-free인 것은 아님 : Lock이 존재하는 경우 다른 쓰레드를 실행할 수 없어 싱글 쓰레드와 다를 바가 없음     → wait-free를 유지하며, 메모리로 Atomic Memory를 만들 수 있는 알고리즘 존재? : 존재, 이 강의에서 생략.  → wait-free를 유지하며, 기존 씽글 스레드 자료구조도 Atomic Memory를 사용해 멀티쓰레드 자료구조로 변환 가능? : 불가능하다.. 2024. 4. 24.
728x90
반응형