전체 글 216

[게임 프로그래머 입문 올인원] 자료구조 : 선형과 비선형 기초내용 (46강)

A. 자료구조 1. 선형과 비선형 a. 선형구조 🌟 자료를 순차적으로 나열한 형태 배열 연결리스트 스택 / 큐 👉 대부분의 경우 이 선형구조를 사용함 b. 비선형 구조 🌟 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태 트리 그래프 2. 선형 자료구조 (배열 vs 동적배열 vs 연결리스트) a. 배열 🌟 사용할 방 개수를 고정해서 계약 (절대 변경 불가) 연속된 방으로 배정받아 사용 HTML 삽입 미리보기할 수 없는 소스 연속된 방 HTML 삽입 미리보기할 수 없는 소스 방을 추가 / 축소 불가 👉 사용하는 경우 : 맵, 커스터마이징, 인벤토리 등 절대 변하지 않는 경우 하지만 동적배열과 크게 구조상 다를게 없기 때문에 동적배열로 생성해도 상관 없음 b. 동적배열 🌟 사용할 방 개수를 유동적으로 계약 ..

[프로그래밍 입문 올인원] 동적할당과 캐스팅 : 블루프린트 실습 5 (45강)

A. 블루프린트 실습 5. 블루프린트 실습 a. 새로운 프로젝트 생성하기 프로젝트 new1 (이름 아무렇게나) 생성 강의자료로 받은 리소스 파일들을 Contents > Resources(새로생성) 폴더에 넣어줌 b. 리소스 수정하기 1) 배경 수정 다운받은 파일 BG의 백그라운드를 좀 더 투명하게 만들기 위해 텍스처를 적용하게 되면 2) 스프라이트 생성 위에서 생성한 텍스처를 스프라이트로 생성해줌 📌 스프라이트 : 인게임에 배치할 수 있는 2D 오브젝트 생성한 스프라이트를 드래그 드롭해서 월드에 만들어주고 c. 객체 생성하기 이중 side-idle만 2d로 만들어봄 d. 리소스를 객체지향적으로 관리하기 e. 피격판정 생성하기 🧡 블루프린트 클래스를 수정할 때 이미지가 안보인다면 f. 카메라 달아주기 자동..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 버그 유형과 디버깅 연습/답안 (43, 44강)

A. 버그 유형 1. 버그 유형의 종류 a. Null 크러쉬 (95%) 🌟 없는 객체에 대한 데이터 변형이 일어날 경우 둘 다 크러쉬가 나는 코드, 왼쪽 p 포인터만 봐도 0x000000... 로 나옴 b. 정수 오버플로우(언더플로우) (0.001%) 🌟 범위를 초과해 저장하면 일어나는 경우 이렇게 범위를 초과해서 저장하게 되면 음수값이 저장됨 마치 옛날 문명 간디처럼,, 갑자기 폭군이 된다 c. 메모리 릭 (0.1%) 🌟 메모리를 만들었는데 해제하지 않아서 일어나는 경우 나중에 덤프로 코드를 분석하면 돼 (몇시간 뒤 서버가 다운될지 나옴) 그나마 괜찮은? 버그 d. 메모리 오염 1) 캐스팅 🌟 가장 빈번, 잘못된 객체로 캐스팅 된 경우 2) 버퍼 오버플로우 🌟 할당한 값 보다 더 큰 메모리 공간을 사용..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 전방 선언 (40강)

A. 전방 선언(Forward Declaration) 1. 전방 선언 a. 전방 선언이란? 🌟 컴파일러에게 식별자(함수, 클래스, 변수 등)가 미리 선언되어 있다고 알려주는 것 C++ 및 다른 프로그래밍 언어에서 사용되는 중요한 개념 중 하나 헤더 파일의 사용을 최소화하고 코드를 더 효율적으로 구성하는 데 도움 b. 전방 선언의 목적 순환 참조(Circular Dependency) 문제를 해결하고 헤더 파일의 의존성을 최소화하는 데 사용 컴파일 속도를 향상시키고 중복된 코드를 방지하는 데도 도움 특히 대규모 프로젝트에서 중요한 역할 👉 즉, 무거워지고 꼬이기때문에 사용하는 것 💥 순환 참조의 컴파일 오류 순환 참조는 서로에 대한 헤더 파일을 포함하거나 의존하는 경우 발생할 수 있으며, 이로 인해 컴파일 ..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 인벤토리 (38강)

더보기 여기에 이어서 작성하는 글 [게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 아이템 드랍 (36강 + 38강) A. 아이템 드랍 실습 (text RPG) 1. 새 프로젝트 생성하기 a. 솔루션은 서류 가방 솔루션은 서류가방이고 프로젝트는 서류야,,,! b. 시작 프로그램(프로젝트) 설정 아니면 그냥 아래처럼 프로젝트 우클 monamu.tistory.com B. 인벤토리 실습 1. Inventory 생성 먼저 Inventory 를 왜 생성해야 하는지 알아보자 앞서 만들어진 item에 대한 권한을 누군가가 가지고 메모리를 해제 해야 하는데 하나하나 찾아서 각 해제하기 쉽지 않다 따라서 Inventory 객체를 생성해서 각 Item을 배열로 넣어주고 Item이 생성, 소멸될때마다 Inventory의..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : C 스타일 캐스팅 과 캐스팅 4총사(37강, 42강)

A. C 스타일 캐스팅 (37강) 1. 일반적인 타입 변환 a. 값 타입 변환 🌟 의미를 유지하기 위해서 원본 객체와 다른 비트열 재구성 a와 b는 완전히 다른 주소값이 들어가게 됨 (원본 객체와 다른 비트열 재구성) b. 참조 타입 변환 이렇게되면 이상한 값이 b에 들어가는데, 이유는 123456789의 주소값을(a) float& 형태로 변환하다보니 이상한 값으로 변환된것 평생 쓸 일 없음 c. 안전한 변환 의미가 100% 일치하는 경우 작은 메모리 ➡ 큰 메모리로 옮기는 경우 d. 불안전한 변환 의미가 일치하지 않는 경우 큰 메모리 ➡ 작은 메모리로 옮기는 경우 e. 암시적 변환 컴파일러가 알아서 변환해주는 것 2. 포인터끼리 캐스팅(클래스) a. 참조가 되지 않은 클래스끼리 캐스팅 포인터끼리의 변환..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 아이템 드랍 (36강 + 38강)

A. 아이템 드랍 실습 (text RPG) 1. 새 프로젝트 생성하기 a. 솔루션은 서류 가방 솔루션은 서류가방이고 프로젝트는 서류야,,,! b. 시작 프로그램(프로젝트) 설정 아니면 그냥 아래처럼 프로젝트 우클릭으로 설정해도 됨 (우클릭+a) 2. Item 생성 및 출력하기 a. Item 클래스 생성하기 Item.cpp / Item.h 파일 생성 아이템 클래스의 기본적인 틀(생성,소멸자, 멤버변수) 작성 아이템 희귀도 enum을 작성해주고 멤버변수에 포함 아이템을 상속할 Weapon과 Armor class를 작성 아이템 클래스와 동일하게 기본적인 틀 작성 각 자식클래스의 멤버변수에 접근하기 위한 get,set메소드 처리 HTML 삽입 미리보기할 수 없는 소스 #pragma once //아이템 희귀도 e..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 동적할당 기초 (35강)

A. 동적할당 기초 1. 컴퓨터 이해하기 a. 동적 할당의 필요성 만약 MMORPG 게임을 만든다고 하고 몬스터를 50만 마리를 생성해야 한다고 할 때 stack 영역에 몬스터 객체를 많이 생성하게 되면 공간이 부족해지고, 메모리 영역에 할당하면 계속 그 메모리를 가지고 가야한다는 부담이 생김 b. 동적할당이란? 🌟 실시간으로 메모리를 할당받아서 사용하는 것 유저 영역 : 사용자가 사용하는 동작하는 프로그램 커널 영역 : 운영체제가 돌아가는 영역 유저 영역에서 메모리를 실시간으로 요청 ➡ 커널 영역이 더 많은 공간을 할당 c. 메모리 동적 할당하는 2가지 방법 1) malloc + free 🌟 malloc함수로 heap 영역에 공간을 할당해줌 / free는 반대 개념 C에서 등장한 개념 할당된 공간의 주..

C++ OPP 3대요소 : 다형성

C. OPP 다형성 1. 가상 함수 a. 가상 함수(virtual function) 🌟 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수 자신을 호출하는 객체의 동적 타입에 따라 실제 호출할 함수가 결정 HTML 삽입 미리보기할 수 없는 소스 virtual 멤버함수의원형; 기초 클래스에서 virtual 키워드를 사용해 선언하면, 파생 클래스에서 재정의된 멤버 함수도 자동으로 가상 함수가 됨 👉 파생 클래스에서도 virtual 키워드를 사용해 가상함수라는것을 명확히 하는 것도 나쁘지 않음! b. 동적 바인딩(dynamic binding) 🌟 바인딩(binding) : 함수를 호출하는 코드에서 어느 블록에 있는 함수를 실행하라는 의미 C++에서는 함수가 오버로딩될 수 있으므로 이 작업이 조금 복잡 정적 바..

C++ OPP 3대요소 : 상속성

B. OPP 상속성 1. 파생 클래스 a. 상속(inheritance) 추상화, 캡슐화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나 사용자에게 높은 수준의 코드 재활용성을 제공하며, 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련 b. 클래스 상속(class inheritance) 🌟 기존에 정의되어 있는 클래스의 모든 멤버 변수와 멤버 함수를 물려받아, 새로운 클래스를 작성하는 것을 의미 기존에 정의되어 있던 클래스 : 기초 클래스(base class), 부모 클래스(parent class), 상위 클래스(super class) 상속을 통해 새롭게 작성되는 클래스 : 파생 클래스(derived class), 자식 클래스(child class), 하위 클래스(sub ..