[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
static UserManager* GetInstance()//↗ { static UserManager um;//↗, 전역 객체 선언 return &um; } 이 부분에서 static UserManager um;//↗, 전역 객체 선언 static UserManager* GetInstance()//↗ { return &um; } 이렇게 하니까 1개의 확인할 수 없는 외부 참조입니다. 라는 링크 오류가 발생하네요. 왜 그런지 궁금한데 혹시 알 수 있을까요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
게임에서는 60 FPS 정도는 지원을 해줘야 부드러운 화면 처리가 가능하고 60 FPS를 지원하기 위해 게임 루프를 이용해서 1초에 60번 화면 갱신을 해줘야 되기 때문에 루프를 블로킹하지 않는 비동기 API 위주로 대부분의 기능을 구현해야 되는게 맞는 것인지요? 게임 루프가 실행될 때 Input > Update > Render 라는 큰 흐름은 유지되어야 될텐데 만약 Input이 발생할 시점에 Update나 Render가 실행되고 있다면 Input에서 발생된 데이터는 별도의 자료구조에 담겨있다가 다음 루프에서 Input 데이터를 가져와서 처리하는 형식으로 진행되는게 맞는걸까요? 이벤트 루프라던지 게임루프와 같은 것에 대한 개념이 부족한거 같아 질문드립니다.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Spirte 코드 44~52번줄 부분에서 { } 안에 적는 이유는 코드 정리를 깔끔하게 하기 위함인가요? 아니면 다른 이유가 있는건가요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
이 상황과 관련해서 몇 가지 같이 질문드려봅니다... 두 번째 for문(-> 주석 '//PK당해서 랜덤으로 일부 아이템 드랍' 부분)에서 스코프 내 지역변수가 최적화되어 사용할 수 없다는 메시지와 함께 내용을 알 수 없다고 나옵니다. 비슷한 경우를 포폴 작업하면서 몇 번 마주한 적이 있었는데요, 혹시 왜 이런 걸까요?_? (참고 사진) 이 질문이 본론이기는 한데, if문으로 RemoveItem 호출 후 반환되는 bool값에서 계속 false가 반환되는 듯 합니다. 1번 질문에 남긴 이유 때문에 디버깅으로 정확한 원인을 파악하지 못했습니다(ㅠㅠ) 그리고 같은 부분을 강의에서 코드가 정상 작동 되는지 확인해주셨었는데요(50:33), 이 때 if문 끝에 세미콜론이 붙어 조건문의 내용으로 적었던 출력 부분이 반드시 작동되도록 처리 되었더라구요. 강의를 여러 번 반복해서 보며 제가 잘못 작성한 부분이 있는지 확인해보았으나 발견하지는 못했습니다.. 혹시 정상 작동 시키려면 어떻게 수정해야 하는 걸까요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
(1)인자로 받은 dest값이 예제처럼 비워져 있는게 아니라 이미 문자 데이터가 채워져 있는 상황이고, (2)dest에 채워져 있는 문자의 길이가 복사하려는 src의 길이보다 더 길다면, 해당 함수로 원하는 결과를 얻지 못하게 될 것 같다는 생각이 들었습니다. 함수가 호출되었을 때 인자로 받은 dest를 초기화하려면 어떻게 처리하는 방법이 있을 수 있을까요? dest의 공간에 모두 0문자를 입력해버리는 건 그다지 좋은 방법이 아닐 것 같아 질문 남겨봅니다.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
선형 자료구조 섹션을 다 봤는데요. 자료구조라는게 뭔가요? 왜 만드나요? 자료구조에서의 선형이라는 말은 뭘 의미하나요? 섹션 마지막까지 이 질문에 대한 답을 찾을 수 없었습니다. 이 섹션은 입문자를 기준으로 만들어진 강의같지 않습니다. 이 글을 보신다면 꼭 좀 답변 부탁드립니다. 이전에 연결리스트 강의에 올렸던 질문도 답변 부탁드립니다. 초심자의 경우 확신을 얻어가는 경험이 무엇보다 중요합니다. 부탁합니다.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
객체지향 개론에서 설명하신 Knight 와 같은 개념들은 게임이라는 환경이 너무 익숙하다 보니 어떠한 기능들을 수행할 수 있고 거기에 필요한 데이터가 어떤 것이다.라는 형식으로 대략적인 추상화가 가능하지만, 만약에 특정 기능을 구현해야 되는데 이 기능을 둘러싼 객체가 추상화가 잘 안되는 경우에 기능과 연관된 이름으로 객체를 만들어도 괜찮은 방법인지요 ? 제가 이러한 질문을 드리는 이유는 프로그래밍을 하다보면 특정 기능을 구현할 때, 몬스터라던지 상품이라던지 이런 개념들은 추상화가 가능하지만 기능 구현이 중심인 요구사항을 만들다보면 기능을 수행할 객체가 마땅히 떠오르지 않을 때가 많은거 같아서요.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
영상 25분 즈음에 소멸자에서 _tail->next = nullptr; 이런식으로 처리해 주지 않아도 while문이 정상적으로 종료되는 이유를 모르겠습니다. deleteNode 에 _tail 이 갖고 있는 주소값을 넣어줬기 때문에 delete delelteNode; 에서 동적할당 된 Node 클래스가 삭제되어서 nullptr 값이 되고 node 가 nullptr 값을 들고 있게 되는 건가요? 근데 이건 아닌거 같은게 delete를 하기 전에 node = node->next;를 하기 때문에 _tail = _tail->next; 라는 얘기고 여기서 따로 _tail->next 의 값을 넣어주지 않았는데 왜 정상 작동하는 걸까요? 엉뚱한 주소값을 가져야 하는거 아닌가요? 초회차 학생이라 최대한 쉽게 설명해주시면 감사하겠습니다. 아! Node 클래스 초기화 부분에서 next 초기값이 nullptr 이기 때문에 List 생성자에서 _tail = new Node(0); 로 동적할당 한 부분에서 next 는 nullptr 값을 갖고 있기 때문인가요? 오~이거 맞는거 같은데
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
switch (sceneType) { case SceneType::DevScene: newScene = new DevScene(); break; case SceneType::GameScene: newScene = new GameScene(); break; } sceneType별로 동적할당을 하는 부분 같은데, new 부분에 밑줄이 뜨는 이유가 뭘까요? GameScene부분과 DevScene 부분 상속 처리는 다 했습니다
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
iocp 를 설명하는 부분에서 메인 쓰레드에서 CreateIoCompletionPort 함수로 cp 에 소켓을 넣고 WSARecv 를 해주면 그 다음부터는 다른 쓰레드에서 WSARecv를 해줘야 한다고 하셨는데 그렇다면 그 소켓은 cp 에 게속 있으면서 이벤트를 받는건가요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
게임서버 엔진 부분 챕터 부분이 서버의 밑단을 직접 구축해보는 파트인 것으로 알고 있는데 언리얼 엔진에서 클라이언트와 연동을 할 때도 이러한 밑 단을 구축할 방법이 있는 것인지 궁금합니다. 또한 용어에 대해 궁금한 것이 언리얼 엔진에서 리슨서버나 데디서버를 사용한다는 것이 포톤서버와 같은 상용 서버를 사용하는 것인지 궁금합니다. 아니면 본 강의에서 처럼 iocp를 사용하는 개념과 비슷한 개념인지 궁금합니다. 감사합니다.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
안녕하세요 루키스님 강의를 듣다가 이해가 잘 되지 않는 부분이 있어서 질문드립니다!! 병합 정렬의 MergeResult() 에서 아래 코드가 잘 이해가 안되는데요..! 왜 v[left] = temp[i] 가 아니라 v[left + i] = temp[i] 인건가요..?? // temp 에 넣어준 걸 원본에 덮어쓰기 for (int i=0; i<temp.size(); i++) v[left + i] = temp[i];
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Weapon::Weapon() : Item(IT_Weapon) { switch (_rarity) { case IR_Normal: _damage = 1 + rand() % 5; break; case IR_Rare: _damage = 10 + rand() % 5; break; case IR_Unique: _damage = 50 + rand() % 5; break; } } 이 부분에서 맨 위, Item(IT_Weapon) 가 어떻게 나온건지 궁금합니다. : 뒷 부분은 초기화하는 것을 간략하게 나타낸 것이 아닌가요? 그렇다면 Item = IT_Weapon; 이라는 코드 대신에 사용했다는 말인데, Item 자체는 class 명인데 코드가 말이 안되는 것 같습니다..