inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 게임 만들기 연습 문제 패키지

1.3 상호작용 맛보기 - 키보드 입력과 반응

multiple bullet 문제

321

김찬하

작성한 질문수 2

0

안녕하세요, 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줄을 쓰는 것 외에는 찾을 수 없어, 질문글을 올려봅니다 ㅠ

감사합니다.

OpenGL C++ oop

답변 1

0

홍정모

안녕하세요?

세상에 for문을 100번씩 적으면서 프로그래밍하는 일은 있어서는 안되겠지요. (이제 와서 다시 따배씨++를 수강하실 필요는 없습니다만, C++을 C++ 답게 사용하는 방법을 계속 궁리해보시면 좋겠네요. 아직 C 프로그래밍 스타일을 가지고 계신 것 같습니다. 본 강의가 따배씨++를 통해서 현대적 C++ 문법을 공부하신 분들을 가정하고 만든 거라서 낯설게 느껴지실 수 있습니다.)

c++ 프로그래밍에서는 동적할당 메모리 대신에 거의 대부분 std::vector를 사용합니다. MyBullet* bullet[100] 대신에 std::vector<MyBullet*>이나 std::vector<MyBullet>을 사용해보세요. std::vector에서 제공하는 size()함수를 이용하시면 for문에서 100을 하드코딩 하실 필요가 없습니다. 거기에 더해서 auto와 함께 더 편하게 vector를 사용하실 수도 있는데, 검색해보시면 modern c++ 문법을 찾아보실 수 있을 겁니다. 따배씨++의 교재인 learncpp.com을 보시는 것도 좋습니다.

비슷한 질문을 몇 번 받은 기억이 나는데 밑에 다른 분들 질문답변도 참고해보세요.

중간중간 어려운 부분들이 계속 나타나겠지만 포기하지 않고 게임 만드는데 성공하셨으면 좋겠네요.

0

김찬하

감사합니다!

깃허브에서 받은 코드가 왜 강의코드랑 다를까요

0

82

1

Mac vscode 으로 시작하시려는 분들께

0

322

1

마우스 좌우 버튼을 동시에 눌렀을 때의 원의 위치

0

437

1

정답은 어디서볼수있나요?

1

356

2

예제코드

1

505

2

따배C++ 몇 강까지 학습한 후 수강가능 할까요?

1

650

1

15:00 부근 질문 있습니다.

0

426

1

(20.4 참고) 20.4에 해당하는 가이드 페이지가 어디있는지 모르겠습니다.

0

377

1

multimap 질문

0

362

2

도형들의 움직임이 너무 빠릅니다...

0

471

1

vcpkg 설치를 했는데

0

694

2

mutiple bullet 관련 질문 드립니다.

0

497

2

실행 후 화면 꺼짐

0

588

2

예제 파일 실행 시, 에러

1

572

1

아직 못풀어도 괜찮을까요?

0

507

1

코드 열었을 때 오류

1

823

3

코딩공부에 대해서 막히는부분

0

342

1

vcpkg 설치 오류

0

599

2

랜덤값 질문입니다.

0

430

1

vcpkg 다운로드에 문제를 겪고있습니다

1

429

1

if 문에 >= 대신 == 넣으면 작동을 하지 않는 이유가 무엇인가요.

0

285

1

프로그램 실행 순서 질문

0

283

1

2.2.2 상속으로 깔끔하게 init 메서드 질문

0

231

1

txt file로부터 키바인딩

0

306

2