월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Exercise_A 질문입니다.
위 사진의 46번째 줄 delete[] arrows; 처럼 Arrow* 배열을 해제시켜주는 것은 불가능한가요? 생각나는 안되는 이유로는 1. 기본 타입이 아니어서 안된다. 2. Arrow 클래스 소멸자 부분을 수정해줘야 한다. 이정도네요. 정확한 이유가 뭔가요?!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
메모리 저장
루키스님 좋은강의 잘 듣고있습니다! 다름이 아니라 강의를 듣다가 메모리에 데이터가 저장된 부분을 보니 데이터가 연속적으로 저장되지않고 16바이트 정도 띄워져서 저장이 된걸보고 구글링을하다 64비트 환경이여서 메모리 정렬때문에 8바이트 단위로 저장이 된거구나 라고 생각했는데 이 이유가 맞나요?? 또,막상 이렇게 확인해보니 cccccccc 0113f8a0 0000001 ccccccccc 이런식으로 저장된걸 보니 왜 cccccccc 0113f8a0 ccccccccc 0000001 이 아니지라는 의문이 생기더라구요 이유를 알고싶으면 운영체제를 공부해야하나요? 아니면 컴퓨터 구조쪽을 공부해야하나요??? 무엇을 공부해야 알 수 있을지 궁금해요 ㅜㅜ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
중간 삽입/삭제 질문
1) 중간 삽입/삭제가 빠르다 라고 하셨는데 단 해당 위치를 알고 있다는 가정하에 빠르다 라고 하면 올바른 설명이 되나요? 2) erase의 경우 iterator로 위치를 알고 있어야 하는데 remove의 경우 data값만 지정해주면 해당 값이 삭제된다고 설명해주셨습니다. remove의 경우 삭제하고자 하는 값의 위치 정보를 모르는데 삭제가 가능하다는 것은 결국 list를 전부 돌면서 해당 data값을 찾기 때문에 느리다 라고 이해하면 될까요? 3) remove는 느리더라도 원하는 값을 삭제할 수 있다는 장점이 있는데 erase는 iterator로 해당 위치를 알고 있어야 합니다. 그렇다면 추후에 성능을 고려해서 코드를 작성할 경우 erase를 사용 할 계획이라면 다루고자 하는 데이터의 모든 위치를 iterator로 기억하도록 해야 하는건가요? 현업에서 list를 사용한다면 erase를 어떻게 사용하는지 간단한 예시를 알려주시면 좋을 것 같습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
매개변수를 넘겨받는다는 것이...
정확히 어떤 의미인가요? 매개변수와 인수에 대해서 검색하니 매개변수(인자) - 함수 원형 작성 시 사용되는 변수 인수 (전달인자) - 함수를 실행할 때 매개변수로 넘겨주는 값으로 나왔는데 이 정의대로라면 '매개변수가 인수를 넘겨받는다'는 이해가 되도 '매개변수를 넘겨받는다'라는 말은 무슨 뜻인지 이해가 잘 되지 않습니다...
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
pp 질문입니다.
이틀동안 고민했어요. 이렇게 생각하면 맞는건지 궁금해요.. pp 포인터 변수는 main 스택프레임 안의 메모리에 박혀있고. ex) const char** pp -> 0x00000001주소에 박혀있음 pp포인터 변수는 &msg의 주소를 가짐 pp 변수의 주소를 SetMessage 의 매개변수 a에 넣음. *a 로 a(pp)변수가 가진 주소로 텔레포트 -> &msg &msg가 가진 주소에 "bye"의 주소를 넣음 const char** pp = &msg; //[매개변수][RET][지역변수 (msg(hello의 주소)) ][매개변수(a((msg의 주소)))][RET][지역변수] // 매개변수 a 는 pp(&msg)의 주소를 가짐. //*p로 pp 가 가지고있는 &msg주소의 값을 가져옴 // 어라? 주소가 또 있네? -> 그 주소를 바꾸는 것. (&msg가 가지고있는 값(주소)를 바꿈) // 그래서 바뀌는 것. SetMessage(pp); cout << msg << endl;
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
여러개의 로또번호 추출 질문
선생님 로또번호 생성기를 다 작성 후 로또를 사게되면 통상 5천원 정도 자동으로 돌리는데 ChooseLotto()함수를 여러번 돌리면 될줄 알았지만 전부 다 같은 값으로 Print 되는것을 보았습니다. for문으로 반복해서 그런줄 알았더니 그냥 호출을 여러번 해도 결과가 똑같더군요 변수명도 바꿔보고 초기화도 해봤지만 결과는 같은값 5줄이 Sorting 되어서 나옵니다. 각 줄마다 다른 숫자로 자동 5천원 돌렸을 때처럼 나오는건 어떻게 할 수 있을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
반복문 최적화 관련 질문 있습니다!
2.compute bound - loop inversion, Optimization of Computer Programs in C 이 부분을 읽고서 무슨 뜻인지 알기 어려웠는데 수업을 레지스터를 하나 더 적게 사용할 수 있겠다는 생각이 들었습니다. RayTracing In One Weekend 9.5 A Scene with Metal Spheres 를 살펴보면 이미지 픽셀을 순회할 때 전위 감소 연산자를 사용하고 있는데 최적화 기법을 고려하여 배열은 순회하도록 작성됐다고 생각해도 괜찮을까요? ... std::cout << "P3\n" << image_width << " " << image_height << "\n255\n"; for (int j = image_height-1; j >= 0; --j) { std::cerr << "\rScanlines remaining: " << j << ' ' << std::flush; for (int i = 0; i < image_width; ++i) { color pixel_color(0, 0, 0); for (int s = 0; s < samples_per_pixel; ++s) { auto u = (i + random_double()) / (image_width-1); auto v = (j + random_double()) / (image_height-1); ray r = cam.get_ray(u, v); pixel_color += ray_color(r, world, max_depth); } write_color(std::cout, pixel_color, samples_per_pixel); } } ... 외부 루프는 --j인데 내부 루프는 ++i인 이유에 대해서도 조금 궁금합니다. 리틀엔디안 빅엔디안이랑 관련이 있을까요? 현업에서 그래픽스 라이브러리 API를 가져다 쓰거나, 만들어 쓸 때 인덱스를 --i를 선호하는지 ++i를 선호하는지 궁금합니다!
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
computerValue 만들 때..
안녕하세요 좋은 강의 잘 듣고 있습니다 다름이 아니오라, computerValue 값을 만들 때 0~32767까지가 총 32768개의 숫자라서 0,1,2가 나올 확률이 실제로는 10922/32768, 10923/32768, 10923/32768로 미세한 차이가 날 것 같은데 이 미세한 차이까지도 맞춰주는 방법이 있을지가 궁금합니다! 그리고 1번째 예제를 직접 만들었을 때 처음에는 while(true) 안에 switch를 쓰고 그 안에 if-else if-else를 쓰는 방식으로 만들었습니다. 그런데 직접 실행시켰더니 마지막 default 쪽에서 break를 걸어놓아도 switch까지만 break를 하고 while 내에서 계속 작동이 되었고 결국 해결을 못했습니다...이 경우는 어떻게 해결할 수 있을까요? 마지막으로 input과 computerValue를 while 내에 넣어주셨는데 computerValue를 그렇게 하신 이유는 이해가 되었지만(매번 value값 갱신을 해야해서) input의 경우는 잘 모르겠습니다...그냥 main 내에만 넣는 것과 유의미한 차이가 있는 것인가요? 감사합니다!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
선생님 화면이랑 호출스택이 다르게 나옵니다ㅠㅠ
Exercise 8번 문제를 실행하면 선생님 호출스택에서는 [ Exercise_8.exe!Archer::~Archer() 줄 17 ] [Exercise_8.exe!main() 줄 57 ] 이렇게 뜨는데, 제 호출스택은 위와 같이 나옵니다. 클릭해보면 제가 만들지도 않은 이상한 코드들이 나오는데 통상 디버깅할때 저런 코드들은 무시하면 되는건가요? 그리고 호출 스택이 다르게 나오는 건 그냥 컴퓨터 환경마다 달라서 그런건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
디버깅시
안녕하세요 시간 21:25 디버깅시 저는 자동칸에 들어가도 이름이 total , winPErcentage, wins가 자동으로 안뜨더라구요. 세팅을 어떻게 해주어야 자동으로 변수들이 입력된 것을 볼 수 있는지 알 수 있을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Game 객체는 왜 stack 영역에 만들었나요?
Game도 어찌됐든 객체인데 스택에 만들어주는 이유가 있나요? Game 객체의 크기가 커지는 경우 stack overflow가 발생하진 않나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터 멤버 변수
class Game { public: private: Player _player; Player* _player; }; 클래스 멤버 변수로 포인터가 아닌 일반 객체를 선언해서 들고 있을 경우 발생하는 문제점(?) 혹은 한계에 대해 질문이 있습니다. 첫째, 일반 객체에 추후 knight, archer 등등 다른 캐릭터 타입을 _player에 할당할 경우 자식 클래스의 데이터가 더 크기 때문에 데이터 소실이 발생할거라고 설명을 해주셨습니다.그런데 이 문제는 포인터로 선언해서 들고 있는 클래스 변수에도 동일하게 나타나는 문제가 아닌가요? 강의를 듣고 이해하기로는 포인터가 아닌 일반 클래스 타입 객체를 사용할때만 이 문제가 발생하는 것으로 이해가 되는데 제가 잘못 이해한 부분이 있을까요? 둘째, 포인터 변수와 일반 클래스 변수와의 명백한 차이는 Game 클래스 자체적으로 들고 있어야 하는 데이터 양이 크기인데 포인터의 경우(4 or 8 byte)로 국한되지만 일반 클래스 변수의 경우 해당 멤버 클래스의 크기만큼 Game 클래스에서 복사되어 들고 있어야 한다. 멤버 변수로 포인터가 아닌 일반 클래스 변수를 들고 있을 경우 발생하는 한계점에 대해 '두번째'로 언급한 내용에 대해서는 이해가 됩니다. 하지만 첫번째 내용이 명확히 이해가 되지 않습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
부모클래스 = 자식클래스 부분이 잘 이해가 안갑니다ㅏㅏ
(ex. Dog dog = bulldog ) 개념적으로 Dog이 큰거고 bulldog이 작기 때문에 큰 Dog안에 bulldog을 대입하는게 가능하고 bulldog에 Dog을 대입하는거는 형변환이 필요하다. 개념적으로는 이해가 가지만..... (ex. BullDog bulldog = dog ) dog는 의 멤버변수는 2개고 bulldog의 멤버변수는 상속받아서 3개 잖아요 그래서 dog는 size가 8byte 이고 bulldog은 size가 12byte라고 했을 때 작은바구니(dog)에 큰 데이터(bulldog)을 넣는게 왜 성립되는지 이해가 안갑니다. (ex. Dog dog = bulldog ) 오히려 큰바구니에 작은 데이터를 넣는게 자연스럽지 않나요? (ex. BullDog bulldog = dog )
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
bool IsDead 반환값
안녕하세요! 선생님이 작성하신 bool IsDead 함수에서 반환값 부분이 이해가 잘 안 돼서 질문드립니다 먼저 저는 아래와 같이 코드를 짰습니다 bool IsDead() { if (m_hp <= 0) return true; return false; } 선생님께서는 bool IsDead() { return _hp <= 0; } 와 같이 return true, false 상황을 나누지 않고 바로 원하는 조건을 return하셨던데, 이 부분이 문법이 바로 와닿지가 않아서요. 제가 작성한 코드를 간략화하면 선생님 코드와 결국 같은 의미인걸로 이해하긴 했는데 맞나요?? bool 함수를 쓸 때 참/거짓 상황을 나눌 필요없이 true인 상황을 바로 return하면 되는건가요? 그리고 한 가지 더 궁금한게 있습니다 if (_monster->IsDead() == true) 이 코드와 if (_monster->IsDead()) 이 코드는 완전히 똑같은건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
그래서 결국 클래스 내부의 _hp는 따로 캡처를 못하는건가요?
영상 마지막에 this를 캡처하게되면 어떻게되는지 잘 이해를 했습니다. 근데 결국 클래스내부에서 _hp만 캡처하여 사용하는방법은 없는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
문자열 출력
1. const char* 형은 포인터로 주소를 담는 것인데, const char* a = "hello" 라고 하였을때 h , e , l, l , o 모두 각기 다른 메모리에 저장되어 있을 것인데 이때 포인터가 해당 메모리들을 전부 저장하는 건가요? 첫번째 주소만을 저장한다고 한다면, a를 출력할때 h만 나와야하는게 아닌가요? 정확히는 h의 주소가 출력되어야 하는게 아닌가요? 2. char b[] = "hello" 배열의 이름은 배열의 첫번째 주소값을 저장하고 있다고 했는데 char형은 어째서 주소가 아닌 값을 내뱉는건가요? 3. 배열은 매개변수로 넘겨줄때 왜 포인터로 넘겨지나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수객체가 굳이 필요한가요??
함수 객체를 가만 보아하니 예를 들어 Knight클래스가있다하면 MoveTask같은 클래스 말고 그냥 Knight 클래스안에 플레이어의 좌표를 넣어놓고 move메소드같은것도 하나 만들어두고 Knight에서 꺼내쓰면 되지않을까 라는 생각이 듭니다 함수 포인터는 되게 좋구나 라는 생각을 했는데 함수객체는 띠용? 하는 느낌이좀 드네요 혹시 생각을 잘못하고 있는걸까요??
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
조사식 관련
64비트 운영체제 환경에서는 모든 기본 단위나 주소 체계 등이 64비트라고 하셨었는데 조사식에서 esp는 출력이 되지만 rsp의 경우에는 '식별자 "rsp"이(가) 정의되어있지 않습니다' 라고 나오는데 왜 그런 것인지 궁금합니다.. 그리고 조사식에 esp를 입력했을 때 형식은 unsigned int로 동일하게 나오지만 값이 강의와는 다르게 16진수가 아닌 10진수로 출력되는데 바꿀 수 있는 방법이 있을지도 알고 싶습니다(&c 등은 16진수로 출력됩니다)
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
연산자 오버로딩을 하지 않았는데 = 는 왜 작동하는건가요?
posA = posB; 가 실행되려면 미리 연산자 오버로딩을 해야하는거 아닌가 싶어서요!
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
헤더파일과 스마트포인터
루키스님, 1강 강의를 다 듣고 배운 문법들을 최대한 사용해서 TextRPG를 만들려고 하는 중입니다. 전에 헤더파일에는 최대한 include를 지양해야 한다고 하셨는데 위의 사진과 같이 스마트 포인터를 사용하려면 어쩔수 없이 include를 해야하나요? 아니면 다른 방법이 있을까요?