묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
SetConsoleTextAttribute 함수 특수문자 겹침 현상..
위와 같은 현상이 왜일어나는지 아시나요?같은 색으로 하면 괜찮습니다..색은 변경할때 반칸씩 밀려 겹쳐 보이네요..간단한 코딩 아래첨부합니다..#include <iostream>int main(){ int temp = 0; for (int y = 0; y < 25; y++) { for (int x = 0; x < 25; x++) { temp++; //단일색 안밀림.. //SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 1); //색변경시 밀림.. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), temp % 3 == 0 ? 1 : 2); cout << "■"; } cout << endl; }} 환경은 윈도우 11입니다.
-
미해결게임 엔진을 지탱하는 게임 수학
1 라디안의 값에 오차가 있습니다
검색이나 직접 계산을 했을 때 1 라디안이 약 57.2958이 나오는데, 강의문서에 첨부된 값이 52.2958로 되어있습니다. 수정이 필요해 보입니다.
-
해결됨게임 수학의 이해
책 159페이지 벡터 함수
여기서 왜 벡터를 입출력으로 사용하는 선형성을 가지는 함수가 (ax, by)로 설계되는게 아니라 (ax + by, cx + dy)로 설계되나요?벡터는 (x, y) 형태로 알고 있는데 갑자기 왜 x와 y를 더하는 지 모르겠어요
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
섹션 3. 포인터와 배열 (3주차) 배열 실습까지 진행했는데요
저는 코드를 똑같이 따라 했다고 생각했는데 오류가 납니다.파일 올려주신다고 했는데 어디서 다운 받을 수 있나요? https://youtu.be/7Tk8ocwMO7Q
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
반년넘게 C#해도 이해라는게 도저히 안갔는데
C++하니까스택이고 힙이고 참조고 이해가 됩니다진짜 왜 C#을 먼저했을까요? 감사합니다
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
hash_map, map 질문 드립니다.
hash_map 같은 경우 그럼 큰 공간을 미리 할당해 놓고 할당된 공간 안에 key값을 기준으로 value 값을 채워 넣어 준다.그럼 예를 들면 map.reserve(100);과 같은 개념일까요??메모리를 희생하여 CPU 연산 속도를 올린다는 의미가reserve : 큰 공간을 미리 할당(메모리 희생)이사비용 감소 (미리 큰 공간을 할당하여 사용하므로 new ...() 과 같은 동작을 안해도 되므로) -> CPU 연산 속도 증가? 이러한 의미로 이해했는데 제가 이해한바가 맞는지가 궁금합니다.key값을 알면 빠르게 찾을 수 있다. -> map은 이진 탐색 O(logN)으로 찾지만, hash_map은 hm[key] O(1) -> m[key]도 가능하지 않나요? 그럼 map도 키 값을 알면 O(1) 즉 빠르게 찾을 수 있게 되는 건가요?hash 기법을 이용해서 key값을 추출하는 이유가 보안 때문인건가요?메모리를 늘릴 수 록 성능이 좋아지는 의미가 키 값이 겹쳐질 확률이 적어져서 성능이 좋아지는 건가요? -> 키 값이 겹치면 빈 공간을 찾아 가야하니
-
해결됨게임 수학의 이해
예제 방정식 이해해야 하나요
게임수학 책 사서 공부하고 있는데 하트 방정식 같은 식 이해해야 하나요? 그리고 벡터 헤더같이 예제 코드에 있는 문법들이나 어떤 메서드가 있는지, 구조가 어떻게 되는지 책에 나오지 않은 코드들 뜯어봐야 하나요? 독학하면서 어디까지 파고들어야 할 지 감이 안잡혀서 문의드립니다!
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Stack Frame 구조 질문 (section2 스택메모리와 스택프레임 10분~12분경)
강의에서 설명된 내용 기준으로 argument 10 및 return address가 main함수의 스택 프레임에 있는 것으로 설명되었는데, 실제 코드에서 main함수에서 Test함수를 argument 10을 주면서 호출할 시에 매개변수 10에 대한 값과 추후에 다시 main 함수로 돌아오게 될 위치에 대한 리턴 어드레스 값은 메인 스택 프레임이 아닌 그 아래에 위치할 Test함수의 스택 프레임에 있는 것이 더 정확하지 않나에 대한 질문드립니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
Terrain Heightmap 관련 질문입니다.
Terrain 실습을 완료하고 강사님께서 주신 텍스쳐 파일이 아닌 다른 곳에서 받은 파일을 적용해보니 Terrain의 edge 부분의 vertex가 비정상적으로 세팅되어 나옵니다. 제가 생각하기엔 terrain 셰이더 코드에서 localPos.y 연산 부분이 문제가 있는 거 같은데 height 값이 결국 텍스쳐 샘플하는 값이라 문제가 없어야 정상이라고 생각하여 도통 감을 잡지 못하겠습니다. normal 쪽은 단순히 면과 빛의 상호작용을 담당하니 Mesh에 직접적으로 연관이 없을 것입니다. 혹시 텍스쳐가 문제가 있을까 생각해보아서 포토샵으로 색상을 따봐도 딱히 튀는 값이 나오진 않네요. 혹시 강사님께서는 이 문제가 어떤 것에서 기인하는지 짐작가시는 바가 있으신가요?
-
미해결게임 엔진을 지탱하는 게임 수학
새로운 벡터를 만들어 어디다 쓰나요?
조금 엉뚱한 말일수도 있는데.. 내용이 난해하네요 ㅠㅠ 반복해서 들어도 무슨말인지 이해가 잘안갑니다.. 게임에서 어디다 쓰는지 왜 벡터를 조합해서 새로운 벡터를 만드는지 예시를 몇가지 알려주실 수 있을까요??
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
온라인 환경에서 Arrow, 제거와 발사 시 동기화 문제
안녕하세요 Rookis님.강의를 모두 완강하고 포트폴리오를 개선하고 있는 중입니다.강의 중에 화살을 온라인에 추가할 것이라면 Creature와 GameObject 내용을 수정해야 한다고 하셔서 코드 이사는 완료한 상태입니다.지금 Arrow는 MyPlayer에서 입력을 받고 State와 WeaponType을 체크하면 Player에서 Scene에 Arrow를 스폰해주는 방식으로 알고 있습니다.이걸 서버에서는 몬스터나 플레이어를 만드는 GameObject::Create 함수를 파줘서 Arrow를 make_shared로 만들어서 발사 처리를 하게 만들었는데요서버에서 몬스터가 제거되면 클라이언트에서도 정상적으로 몬스터가 제거되는걸 확인은 했습니다.그러나 문제가 몇 가지 있습니다.Arrow 스마트 포인터가 해제되지 않는 현상Arrow 동기화가 종종 씹히는 현상입니다. 먼저 1번입니다.make_shared로 생성된 Arrow가 해제되지 않음void Player::UpdateSkill() { if (room == nullptr) return; if (info.weapontype() == Protocol::WEAPON_TYPE_SWORD) { // 내 앞에 있는 좌표 CreatureRef creature = room->GetCreatureAt(GetFrontCellPos()); if (creature) { if (creature->GetType() == Protocol::OBJECT_TYPE_PLAYER) { SetState(IDLE); return; } // 몬스터가 플레이어에게 피격 creature->OnDamaged(shared_from_this()); } } else if (info.weapontype() == Protocol::WEAPON_TYPE_BOW) { ArrowRef arrow = CreateArrow(); arrow->SetDir(GetLookAtDir(GetFrontCellPos())); arrow->SetOwner(shared_from_this()); arrow->room = room; arrow->info.set_posx(info.posx()); arrow->info.set_posy(info.posy()); arrow->SetState(IDLE, true); room->AddObject(arrow); } SetState(IDLE); }서버쪽의 UpdateSkill 함수인데 여기에서 arrow를 CreateArrow로 만들어서 room에 AddObject로 _arrows map을 만들어 관리를 하고 있습니다. (사실 룸에서 발사체를 관리하는 것이 옳은지도 의문이긴 합니다)void GameRoom::Update() { for (auto& item : _players) { item.second->Update(); } for (auto& item : _monsters) { item.second->Update(); } for (auto& item : _arrows) { item.second->Tick(); } }그리고 Update 함수, AddObject, RemoveObject도 _arrows map을 처리하게 만들었습니다.이렇게 처리하다 보니 화살을 제거할 때 몬스터가 피격받는 순간에 해당 화살을 RemoveObject를 실행하니 삭제 이후에 for문을 돌 때 오류가 발생하며 크래시가 발생했습니다.Arrow가 _arrows 맵에서 관리되어서 스마트 포인터가 해제가 안되는 것 같은데, 화살을 어떤 때에서 제거해야 될지 모르겠습니다.지금은 임시적으로 vector에 참조로 받아와서 Update 하단에서 erase하는 방법을 사용하고 있습니다. 화살 동기화 문제 클라이언트에서는 Projectile 클래스에서 _owner에 대한 정보를 들고 있고 Arrow를 Scene에서 소환할 때 GetOwner 함수로 화살의 주인에 대한 포인터를 들고 있도록 했습니다.기존에 발사할 때도 S_Move 패킷을 그대로 이용해서 Arrow의 _owner 포인터를 이용해서 위치를 초기화해주고 있습니다.그런데 두 클라이언트를 접속시켜서 2를 눌러 WeaponType을 Bow로 바꿔서 공격 키로 테스트해보면 종종 반대쪽 플레이어의 화살이 안보이는 경우가 있습니다.여기에 몇 개의 질문이 있는데요1) 화살을 생성하고 클라이언트에서 패킷을 전송하는 것이 맞는지2) 맞다면 어떤 정보를 패킷에 담아야 하는지3) 서버에서는 어떤 처리를 해주어야 하는지잘 모르겠습니다.일단은 Make, Handle 함수를 파서 ObjectInfo를 넣어놓긴 했습니다.하루 종일 코드를 조작해봐도 해결을 못하고 있습니다.. 도와주세요..
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
disassembly 창
dissasembly 창을 띄우고 싶은데, 이처럼 설정을 해줘도 창이 띄워지지 않습니다. 이런 경우, 어떻게 해야 하는지 문의드립니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
RemoveItem 함수에서 아이템 포인터를 nullptr로 바꾸기 전에 delete를 하지 않는 이유가 있나요?
강의에 나온 예제 에서는 Clear 함수로 모든 아이템을 delete하는데 이때 RemoveItem 함수에서 이미 nullptr로 지정된 아이템은 따로 delete 연산을 하지 않아서 Clear 이후에 배열의 포인터는 nullptr인데 힙 메모리에는 데이터가 남는 게 아닌가 싶어서 질문 드립니다.실제로 RemoveItem을 실행하는 아니템들을 따로 배열에 모아 Clear 함수 이후에 데이터를 확인해 보니 아이템들이 존제하는 것을 확인 했습니다.bool Inventory::RemoveItem(Item* _item){ if (_item == nullptr) return false; int slot = FindItemSlot(_item); if (slot < 0) return false; //delete mItem[slot]; // 제거되는 아이템 모음 mRemove[mRemoveIndex] = mItem[slot]; mRemoveIndex++; mItem[slot] = nullptr; mItemCount--; return true;}위에 mRemove에 아이템을 모아 Clear 이후에 중단점을 걸어 데이터를 확인해 보니 아이템의 데이터가 남아있는 것을 확인했습니다.혹시 의도적의로 delete연산을 하지 않은 것 인지 궁금하여 질문 드립니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
이미지가 어둡게 보이는 현상
스크린샷에서 보이는 것 처럼 윈도우 사진 뷰어에서는 정상적으로 보이는 사진이 작성한 프로그램에서는 어둡게 보입니다.png 확장자만 이런가 싶었는데 동일 확장자 다른 사진은 정상적으로 출력되는걸 확인했습니다.혹시 같은 확장자라도 저장하는 방식이 다른걸까요? 마치 감마 보정이 한번 더 들어간 것처럼 보입니다.
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
프레임 제한 코드의 원리가 궁금합니다.
윈도우api 메인 루프 부분에서 프레임 제한을 위해 적은 코드의 원리를 모르겠습니다. uint64 prevTick = 0; uint64 now = ::GetTickCount64();if(now - prevTick >= 10) // 요부분!{ // TODO prevTick = now;} sumTick 을 만들어서 특정 시간이 되면 if 문으로 들어가는 것도 아니고 현재틱-이전틱 이 일정값 이상으로 조건을 걸어주는게 어떻게 프레임을 제한하는지 궁금합니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
해당 강의 수강 후 질문
안녕하세요 루키스님!해당 강의를 완강한 후에 대해, 궁금한 게 있어 질문드립니다.올인원 C++의 내용으로도 MMO Part3 자료구조 알고리즘과 다이렉트x11 강의를 수강하여도 문제가 없을까요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
포인터 이동 질문
포인터에 대한 강의를 듣고 포인터에 대한 공부를 하던 도중 이해가 되지 않는 부분이 있어 질문드립니다.Shape** shapes;shpaes = new Shape* [100];shapes[0] = new Circle(); //shapes[1] = new Triangle();shapes[2] = new Triangle();...// shapes[1]을 지우고 포인터 shapes[2]번을 shapes[1]번으로 옮길때저는 현재 힙 영역의 메모리 구조를 이렇게 생각하였고포인터는 어쩌피 주소를 닮는 공간이니delete shapes[1];로 도형을 지우고 shapes[1] = shapes[2]로 하고 shapes[2] = nullptr로 하여이런식으로 진행하면 문제가 없다고 생각했습니다.그런데 프로그램을 종료할때 delete[] shapes를 진행하는 부분에서 Heap Corruption Detected( 메모리에 대한 잘못된 접근이나 이미 해제한 메모리에 대한 접근 ) 오류가 나오게 됩니다.그래서 생각되는 문제가 shapes[1] = shapes[2]로 바로 옮기면 되는 것이 아니라 옮기기 전에 shapes[1]에도 shapes[2] 만큼의 크기를 만들어 주고 shapes[1] = shapes[2]로 옮겨야 되는 것인가 라고 생각하여 코드를shapes[1] = new Circle(); // shapes[2]에 저장된 도형을 만들고*shapes[1] = *shapes[2] // 값을 복사하고delete shapes[2]; // shapes[2]를 지우고shapes[2] = nullptr; // nullptr로 가리키고 있는 곳을 풀어준다.이렇게 코드를 수정하니 delete[] shapes; Heap Corruption Detected에 대한 메모리 오류가 사라졌습니다.여기서 드는 궁금한 점이 포인터는 주소를 담는 바구니(8바이트)인데 왜 shapes[1] = shapes[2]로 가르키는 곳만 바꾸는 것으로 Heap Corruption Detected의 오류가 나며 동작이 안되는지 궁금합니다.
-
미해결게임 엔진을 지탱하는 게임 수학
곱집합이 외적 인가요?
고등학교때 배웠던 개념과 비슷한거 같은데 용어만 다른것인지... 궁금합니다!
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Vector::operator+= 값을 반환해야 합니다 라는 오류가 뜨네요
43:40초에 컴파일 하는 곳에서 Vector::operator+=값을 반환해야 합니다 라는 오류가 발생하네요 Types.h에 다시 봐도정상적으로 기입해놨는데 왜 이러는지 모르겠네요..
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
C++이랑 언리얼 방향성
유니티는 딱 정해져있으니까 게임개발시리즈 쭉 공부하다가 실전프로젝트 섞어서 하면 되겠다 하는 방향이 보이는데 언리얼은 올인원, UE5시리즈, MMORPG시리즈 셋다 입문이고 이래서...짜여져있는 로드맵이 없다보니 정하기가 어려워요 ㅠ그래서 혼자 뭘 우선으로 해야할지 고민하다가 물어보는게 좋을거같아서 질문드립니다.강사님 강의로 언리얼 블루프린트로 입문해서 C++ 배우는 식으로 가는 로드맵을 만든다면올인원 -> 입문자를 위한 UE5시리즈 -> C++과 언리얼로 만드는 MMORPG게임개발시리즈 -> C++20, DX11입문올인원으로 한번 슥 확인하고 입문자를 위한 UE5 시리즈보고 C++과 언리얼로 만드는 MMORPG시리즈로 넘어가서 C++ 좀더 심층적으로 하고 C++20 훑어보기랑 DX11 입문으로 넘어가는 식으로..방향을 잡으면 될까요??