월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
마우스 좌우 버튼을 동시에 눌렀을 때의 원의 위치
위 사진은 마우스 양쪽 버튼을 동시에 눌렀을 때 원의 위치입니다. 버튼을 하나씩 눌렀을 때는 커서 위치에 원이 잘 그려지는데, 동시에 누르는 순서와는 상관 없이 누르기만 하면 원이 위와 같이 그려집니다. 캡쳐되지 않았으나 커서는 노란 원 위에 있는 상태이고, mouse_pos 역시 커서 위치대로 출력됩니다. 그런데 빨간 원의 위치가 조금 이상해서 질문 드립니다. 제가 보기에는 빨간 원이(마우스 커서~원점)의 거리의 두 배만큼 원점으로부터 떨어져 있는 것으로 보이는데요, if문의 분기 조건은 다르지만 안의 코드가 translate(mouse_pos)로 동일한데도 이런 차이가 나는 이유가 뭔가요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
정답은 어디서볼수있나요?
강의 마지막에 직접 진행보라는 내용에 대한 답은 없는건가요?굉장히 당황스럽네요;;
- 미해결홍정모의 게임 만들기 연습 문제 패키지
예제코드
예제 코드는 어디서 다운 받아볼 수 있을까요 ?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
따배C++ 몇 강까지 학습한 후 수강가능 할까요?
현재 따배c++을 수강중입니다. 뭔가를 빨리 만들어 보며 실전 위주로 공부하고 싶어서 게임 페키지도 구매하였습니다. 게임 패키지 강의 소개에 12강 기준이라는 글을 봤는데 따배c++ 강의 12강까지 수강하면 게임 페키지 강의를 듣는데 문제가 없을까요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
15:00 부근 질문 있습니다.
#pragma once #include "Game2D.h" namespace jm { class MyTank { public: vec2 center = vec2(0.0f, 0.0f); //vec2 direction = vec2(1.0f, 0.0f, 0.0f); void draw() { beginTransformation(); { translate(center); drawFilledBox(Colors::green, 0.25f, 0.1f); // body translate(-0.02f, 0.1f); drawFilledBox(Colors::blue, 0.15f, 0.09f); // turret translate(0.15f, 0.0f); drawFilledBox(Colors::red, 0.15f, 0.03f); // barrel } endTransformation(); } }; class MyBullet { public: vec2 center = vec2(0.0f, 0.0f); vec2 velocity = vec2(0.0f, 0.0f); void draw() { beginTransformation(); translate(center); drawFilledRegularConvexPolygon(Colors::yellow, 0.02f, 8); drawWiredRegularConvexPolygon(Colors::gray, 0.02f, 8); endTransformation(); } void update(const float& dt) { center += velocity * dt; } }; class TankExample : public Game2D { public: MyTank tank; //MyBullet* bullet = nullptr; //MyBullet* bullet2 = nullptr; // bullet은 총알이 발사됐을 때만 존재하기 때문에 포인터로 되어있고 nullptr로 초기화가 되어있다. //TODO: allow multiple bullets int index = 0; std::vector<MyBullet*> ptr_bullet_array = { nullptr }; //TODO: delete bullets when they go out of the screen public: TankExample() : Game2D("This is my digital canvas!", 1024, 768, false, 2) {} ~TankExample() { //if (bullet != nullptr) delete bullet; //if (bullet2 != nullptr) delete bullet2; for (int i = 0; i <= index; ++i) { if (ptr_bullet_array[i] != nullptr) delete ptr_bullet_array[i]; } } void update() override { // move tank if (isKeyPressed(GLFW_KEY_LEFT)) tank.center.x -= 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_RIGHT)) tank.center.x += 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_UP)) tank.center.y += 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_DOWN)) tank.center.y -= 0.5f * getTimeStep(); // shoot a cannon ball if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { //if (bullet == nullptr) //{ // bullet = new MyBullet; // bullet->center = tank.center; // bullet->center.x += 0.2f; // bullet->center.y += 0.1f; // bullet->velocity = vec2(2.0f, 0.0f); //} //else if (bullet2 == nullptr) //{ // bullet2 = new MyBullet; // bullet2->center = tank.center; // bullet2->center.x += 0.2f; // bullet2->center.y += 0.1f; // bullet2->velocity = vec2(2.0f, 0.0f); //} ptr_bullet_array.push_back(nullptr); ptr_bullet_array[index] = new MyBullet; ptr_bullet_array[index]->center = tank.center; ptr_bullet_array[index]->center.x += 0.2f; ptr_bullet_array[index]->center.y += 0.1f; ptr_bullet_array[index]->velocity = vec2(2.0f, 0.0f); index++; } //if (bullet != nullptr) bullet->update(getTimeStep()); //if (bullet2 != nullptr) bullet2->update(getTimeStep()); // rendering tank.draw(); //if (bullet != nullptr) //{ // bullet->draw(); //} //if (bullet2 != nullptr) //{ // bullet2->draw(); //} //if (bullet != nullptr && bullet->center.x > 1.2f) //{ // delete bullet; // bullet = nullptr; //} //if (bullet2 != nullptr && bullet2->center.x > 1.2f) //{ // delete bullet2; // bullet2 = nullptr; //} //for (int i = 0; i <= index; ++i) //{ // if (ptr_bullet_array[i] != nullptr && ptr_bullet_array[i]->center.x > 1.2f) // { // delete ptr_bullet_array[i]; // ptr_bullet_array[i] = nullptr; // } //} for (int i = 0; i <= index; ++i) { if (ptr_bullet_array[i] != nullptr) { ptr_bullet_array[i]->update(getTimeStep()); ptr_bullet_array[i]->draw(); if (ptr_bullet_array[i]->center.x > 1.2f) { delete ptr_bullet_array[i]; ptr_bullet_array[i] = nullptr; } } } } }; }교수님께서 설명하신 대로 연습문제를 풀어봤고 문제없이 잘 실행되는 거 같긴 한데 메모리 누수가 해결됐는지 잘 모르겠습니다. 연습문제를 풀기 전에 디버깅 모드로 봐도 CPU 사용량이 그대로인데 어디서 어떻게 확인할 수 있을까요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
(20.4 참고) 20.4에 해당하는 가이드 페이지가 어디있는지 모르겠습니다.
Vcpkg를 이용해서 opengl, glew, glfw3 설치(20.4 참고)위 글을 보면 20.4를 참고하여 설치하라는 것 같은대요. 20.4가 어디에 있는지 무엇을 참고 해야하는지 모르겠습니다. 유튜브를 통해 c / c++을 듣고 api를 듣는 도중 해당 강의를 알게 되어 해당 강의를 우선적으로 듣고 api를 들어보는게 좋을 것 같아서 구매를 했는대요. 20.4 / 20.5 / 20.6 참고하라는 말이 있는대 어디를 들어가야 참고할 수 있는지를 모르겠습니다. 알려주시면 감사하겠습니다. ㅜㅠ
- 미해결홍정모의 게임 만들기 연습 문제 패키지
multimap 질문
총알 생성시 초기화를 진행 후multimap<Mybullet*, vec2> _map 변수에 insert 추후 update에서 for문을 이용 _map안의 second(총알의 위치)의 값을 증가된 값으로 변경 for문을 이용하여 iterator에 begin~end()값을 순찰 if문으로 현재의 iter->second(총알의 위치) 값의 좌표를 파악하여 총알 삭제 이런 느낌으로 접근 중인데 삭제를 하려고 하면 메모리 범위를 벗어났다고 하네요 혹시 제가 map을 잘못 생각하고 사용하고 있는건가요? _map의 size()를 확인할 시에는 분명 총알을 발사할 때마다 size가 늘어나는걸 확인 했음에도 계획대로 되지 않아 질문드립니다 이 코드의 경우 vector를 사용하기에는 빈번하게 추가 삭제가 일어나서 제외하고 multimap을 사용하려고 해봤는데 이런식의 접근이 맞는건가요? 아래는 작성 코드입니다 if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { bullet = new MyBullet; bullet->center = tank.center; bullet->center.x += 0.2f; bullet->center.y += 0.1f; bullet->velocity = vec2(2.0f, 0.0f); _map.insert(std::pair<MyBullet*,vec2>(bullet, bullet->center)); } if (!_map.empty()) { for (std::multimap<MyBullet*, vec2>::iterator iter = _map.begin(); iter != _map.end(); ++iter) { iter->first->update(getTimeStep()); iter->second = iter->first->center; if (iter->second.x > 1.3f) _map.erase(iter); } } if(!_map.empty()) { for (std::multimap<MyBullet*, vec2>::iterator iter = _map.begin(); iter != _map.end(); ++iter) { iter->first->draw(); } }
- 미해결홍정모의 게임 만들기 연습 문제 패키지
도형들의 움직임이 너무 빠릅니다...
안녕하세요! 다름이 아니라 깃허브에 있는 예제코드를 클론한 뒤, 아무것도 건들지 않고 영상에 나온것 그대로 rotate(time * 90.0f)를 하면 도형이 영상에서 나온것 처럼 천천히 도는게 아니라 진짜 미친듯이 빠르게 돕니다... 그리고 //jm::TankExample().run(); 예제를 실행시키면 살짝만 눌러도 탱크가 엄청 빠르게 움직입니다. 혹시 클론을 했을때 문제인가 싶어서 다시 클론해봐도 같은 문제가 발생하고, 전부 복사 붙여넣기 해봐도 같은 결과가 나옵니다.ㅠㅠ 혹시 뭐가 문제인지 알 수 있을까요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
vcpkg 설치를 했는데
비주얼 스튜디오 에서는 1>LINK : fatal error LNK1104: 'glfw3.lib' 파일을 열 수 없습니다. 이런 오류가 뜨고 심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태 오류 LNK1104 'glfw3.lib' 파일을 열 수 없습니다. Lecture1 \GameDevPracticePackage-master\Chapter1\Lecture1\LINK 1 비주얼스튜디오 2017에선 이런 오류가 뜨는데 왜그런지 모르겠습니다.. vcpkg install opengl:x64-windows vcpkg install glew:x64-windows vcpkg install glfw3:x64-windows이런식으로 cmd 로 설치를 하고 integrate install 까지해서 done 이 잘 떴는데도 그러네요 ㅠㅠ
- 미해결홍정모의 게임 만들기 연습 문제 패키지
mutiple bullet 관련 질문 드립니다.
안녕하세요. 좋은 수업 재밋게 잘 듣고 있습니다. multiple bullet 관련해서 내주신 숙제를 풀다가 의문점이 생겨 질문을 드립니다. tank example 에 public 에 다음과 같이 std::vector<MyBullet*> bullet_container; 를 추가하고 update() override 부분에 if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { (기존코드) MyBullet* tmp = bullet; bullet_container.push_back(tmp); } 이렇게 볼드체 한 부분을 추가해주었는데 왜 화면상에서는 계속 한 발씩만 발사되는지 모르겠습니다. 제가 잘못 알고 있는 부분이 있다거나 힌트를 주시면 감사하겠습니다!
- 미해결홍정모의 게임 만들기 연습 문제 패키지
실행 후 화면 꺼짐
안녕하세요 교수님! 강의를 듣고 따라해보는 과정에서 실행하면 자꾸 컴퓨터 자체가 꺼져버리는 오류가 납니다. 어떤 이유에서인지 알 수 있을까요? 구글링을 해봐도 한글로는 이에 대한 내용이 나와있지 않네요ㅜㅜ
- 미해결홍정모의 게임 만들기 연습 문제 패키지
예제 파일 실행 시, 에러
먼저 시스템 사양입니다. 64비트 운영체제임을 확인하였고 비주얼 스튜디오 2022 64비트 설치했습니다. 물론 os와 visual studio 모두 영문입니다. 예제 실행 시, 경로를 찾을 수 없다는 에러가 발생하고 있습니다. 대략 GameDevPracticePackage-master\Chapter1\Lecture1\Debug\Lecture.exe파일을 찾을 수 없다 와 같이 뜨는 상황입니다. 따배씨 강의에서 안내해주신대로 깃 헙을 통해 vcpkg를 클론하고 그 후 vcpkg install opengl:x64-windows vcpkg install glew:x64-windows vcpkg install glfw3:x64-windows vcpkg install integrate install 의 명령어들을 사용하여 모두 설치를 하였습니다. 하지만 위의 명령어들을 모두 수행하고 재시도할 경우 #include 부분에서 에러가 발생하였습니다. 또한 다음과 같은 메세지가 뜨는 것을 확인하였습니다. 따라서 sdk의 버전이 맞지 않는가 라는 합리적 의심을 하여 해당 버전을 설치하여 주었습니다. 하지만 그럼에도 문제는 계속되고 있어 무엇이 문제인가 해보니 해당 프로젝트를 리타겟팅을 해주어야한다는 것을 알게 되었고 이를 시도하려는 찰나 다음과 같은 상황에 직면했습니다. 즉, 솔루션 모음에서 우클릭시, 리타게팅 옵션이 떠야하는데 아무것도 뜨지 않습니다. 예제 파일이 아닌 새 파일의 경우 좌상단의 프로젝트 탭도 다르게 뜨는 것으로 보입니다. 왜 이런건가요? 지금 대략 예제 실행만 대략 24시간 동안 visual studio 지웠다가 깔았다가 vcpkg 지웠다가 깔았다가만 반복하고 있습니다 혹시나 이와 같은 문제를 해결하신 분들 계시다면 그 누구나에게 도움을 간곡히 부탁드립니다.
- 미해결홍정모의 게임 만들기 연습 문제 패키지
아직 못풀어도 괜찮을까요?
최근에 c++강의 다 보고는 왔는데사실 강의만 다 봤을 뿐이지 c++ 사용수준은 강의 듣기전하곤 똑같습니다.. 다만 코드를 봤을떄 완벽하진 않지만 어떤 코드인지 어떻게 작동하는지 정도만 아는수준입니다.. 그래서 인터넷 게임예제 같은거 코드보면서 따라 치면서 익숙해져야겠다 싶어서 찾다이 강의를 알고 수강을 했는데요1.1이나 1.2는 작성된 코드에서 한두개만 바꾸는 수준이라어려움 없이 금방 해결했습니다..근데 이번꺼는 어떻게 코드를 짜야겠다는 머리에 그려지는데그 생각을 코드로 구현하는게 쉽지않네요.. // 예제1 총알을 발사할떄 총알이 사라지지 않고 누적되어 메모리 누수가 발생함 // 해결방법은 게임창과 총알을 인식하게해서 화면 밖으로 나갔을떄 총알을 없애야됨 // //예제2 총알을 연속으로 사용할 경우 앞에 발사된 총알이 사라짐 해결하기 //키를 누를떄 마다 새로운 총알 객체를 생성해야됨 어떤 코드를 써야할지도 모르겠고.. 어떤 코드를 써야될지 모르는 상태라 고민을 해도 제자리 걸음이네요.. 보통은 다 푸는게 정상일까요?? 이것도 일단 완강을 해보고 나중에 풀어야 될까요? 아니면 다른 사람의 코드를 보고 이해한 다음 넘어가거나 나중에 완강후에 새롭게 짜보는게 좋을까요.. 항상 연습문제가 나오면 공부방법 떄문에 고민이 많습니다..
- 미해결홍정모의 게임 만들기 연습 문제 패키지
코드 열었을 때 오류
안녕하세요 교수님! 이 수업을 듣기 위해 강의자료를 찾다가 커뮤니티 게시판에서 찾게 됐는데, 열어서 실행해보려 하니 오류가 뜹니다. 사진은 코드를 처음 열었을 때 화면인데, 어떤문제가 있을까요?.. 감사합니다.
- 미해결홍정모의 게임 만들기 연습 문제 패키지
코딩공부에 대해서 막히는부분
공부 시작한지 2달 되었는데 공부해오면서 코드를 어떻게 짤꺼인지는 항상 고민하면 해결되었는데 화면에 도트를 찍기위해서는 코드를 어떻게 짤껀가를 알아서는 해결이 되지않아요 라이브러리라던가 api 일주일넘게 그렇게 구글링 많이하고 그랬는데 화면에 비트를 출력하는것이 해결되지않아썽요 선생님강의도 마찬가지로 화면의 비트를 출력하기위해서 직접 코드를 공부하는게아니라 외부의 함수를 여러개 불러와서 그 불러온 외부의함수의 사용법을 알아서 화면에 비트를 출력하는거였어요 할수없었어요 선생님강의도 마찬가지였어요 처음부터 코딩을하는게아니였어요 코딩을 하는건 어렵지않지만 외부의 함수를 막 불러와서 하는건 해낼수없었어요 공부하는게 힘들어요 코딩은 어렵지않았어요 코딩은 쉬웠어요 몇시간만 고민하면 결과를 만들어낼수있었어요 할수있는걸알아서 코딩하는거는 실습도하지않았어요 근데 코딩이 아니예요 보면 대부분 무슨 외부함수를 불러와서 작동시키는거였어요 이건 해낼수없었어요 c언어로 테트리스 라는 게임을 구현하는게 제일 도움될것같았어요 근데 그이전에 화면에 비트를 출력하고싶었어요 2차원배열을 통해서 근데 그걸 화면에 비트에 일단 찍히는게 먼저 되어야 코딩을 할수있어요 정말 코딩은 안어렵지만 너무 쉽지만 외부함수 막불러오고 윈도우라이브러리, win 32 이런건 도저히 해낼수가 없었어요 방법을 찾고싶어요
- 해결됨홍정모의 게임 만들기 연습 문제 패키지
vcpkg 설치 오류
openGL 설치하기 위해 vcpkg를 설치하려는데 cmd 에서 아래사진처럼 오류가 뜨고 다음으로 못넘어가고 있습니다..ㅠ 이럴땐 어떻게 해야하나요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
랜덤값 질문입니다.
글 작성이 제대로 안되서, 코드에 대한 설명이 미흡할 수 있는 점 미리 양해구합니다.ㅠㅠ 저는 집 색깔을 랜덤으로 정할 때, 기본값이 미리 정해져 있는 상태에서 사용자가 특정 부분만 색깔을 랜덤으로 돌릴 수 있도록 함수를 작성했습니다. 아래와 같은 두가지 함수를 실험삼아 해봤는데요. 첫번째 함수는 랜덤값을 불러오는 헤더를 외부에서 매개변수로 가져오고 두번째는 함수 안에다가 선언했습니다. 그런데, 두번째 함수는 랜덤값이 다 같게 적용이 되더군요. 분명 랜덤값은 _rnd.getInt(0,6);에서 가져올텐데 왜 두개의 함수의 결과가 다른지 이해가 가지 않습니다.ㅠㅠ 제가 분명 기본이 부족한 거일 수도 있겠지만, 인터넷 검색으로도 썩 답변이 안되어 질문글 올립니다. 감사합니다.
- 미해결홍정모의 게임 만들기 연습 문제 패키지
vcpkg 다운로드에 문제를 겪고있습니다
현재 vcpkg를 통하여 opengl, glew, glfw3를 32비트와 64비트 모두를 선생님의 chapter가 있는 곳에 전부 다운받아 놓은 상태입니다. chapter1 - lecture1.sln을 통하여 코드를 실행하였더니 "파일소스를 열 수 없습니다 "GLFW/glfw3.h" 이렇게 에러가 나는데 어떻게 하면 해결 할 수 있을까요?
- 해결됨홍정모의 게임 만들기 연습 문제 패키지
if 문에 >= 대신 == 넣으면 작동을 하지 않는 이유가 무엇인가요.
안녕하세요 교수님. 벽에 부딪힐 때 작성하는 if 문안에 <=(>=)대신 == 을 넣으면 공이 투과하는 이유가 무엇일까요 컴퓨터가 연속적이지 않기 때문에, 혹시 pos.x 가 정확히 0.9f를 지나지 않을 수 있다고 생각해서, cout을 써서 실시간으로 x좌표를 찍어보니, 0.9를 지날 때도 있고, 안지날 때도 있었습니다. 그런데 0.9가 찍힐때도 벽을 투과 하는 이유를 모르겠습니다. 감사합니다.
- 미해결홍정모의 게임 만들기 연습 문제 패키지
multiple bullet 문제
안녕하세요, multiple bullet 문제를 생각해보고 있는데, 혼자 생각한지 너무 오래 되어, 생각이 고착되어 있는 거 아닌가해서, 질문글을 올려봅니다. MyBullet* bullet[100] = { nullptr, }; int i = -1; //bullet number 와 같이 pointer 들로 이루어진 배열을 사용해보려고 했습니다. if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { i++; bullet[i] = new MyBullet; bullet[i]->center = tank.center; bullet[i]->center.x += 0.2f; bullet[i]->center.y += 0.1f; bullet[i]->velocity = vec2(0.5f, 0.0f); } 와 같이 하여, 스페이스바를 누를 때마다, array 한칸한칸에 bullet 객체포인터를 저장했습니다. 여기서부터, 문제가 이렇게 해도 결국, bullet[i] -> update()와 같은 줄을 100줄을 써야한다는 것입니다. if (bullet[0] != nullptr) bullet[0]->update(getTimeStep()); if (bullet[1] != nullptr) bullet[1]->update(getTimeStep()); if (bullet[2] != nullptr) bullet[2]->update(getTimeStep()); if (bullet[3] != nullptr) bullet[3]->update(getTimeStep()); if (bullet[4] != nullptr) bullet[4]->update(getTimeStep()); 와 같이 써야지 작동을 했습니다. 밑에 draw() 함수 도 마찬가지여서, 코드를 줄일 수 있는 방법을 생각해보다가, 도저히 생각이안나서 질문글을 올려봅니다. 찾다보니 thread를 이용하는 것도 나오고 하지만, 유용하지 않다고 판단했습니다. for문을 돌리면, 다음 loop으로 넘어갈 때 실행되던 update함수가 사라지게 되어, 결국 모든 객체의(bullet[0], bullet[1]....)의 update 메소드를 동시에 실행시키는 방법을 일일히 100줄을 쓰는 것 외에는 찾을 수 없어, 질문글을 올려봅니다 ㅠ 감사합니다.