• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

여러발의 탱크 구현 질문이 있습니다.

20.03.18 23:54 작성 조회수 159

0

교수님 깃을 fork해서 multi bullet 구현을 해보았습니다.

unique_ptr를 이용해서 구역을 벗어나면 해당 unique_ptr를 reset해서 delete하게 구현했습니다. 구현간에 궁금한 점이 있습니다.

질문 1)

https://github.com/shonjiho/GameDevPracticePackage/blob/master/Chapter1/Lecture1/TankExample.h#L74-L76

화면을 벗어났는지 범위를 체크하는함수를 isOutMap으로 구현했는데 Game2D Class의 width와 height와는 다른 단위(?)를 가진 것 같아서 할 수 없이 매직넘버를 어림잡아 넣게되었습니다. 어떤 값을 참고해서 범위를 재지정해야할가요?
OpenGL만의 그려지는 단위가 따로 있나요?

의문 1)

https://github.com/shonjiho/GameDevPracticePackage/blob/master/Chapter1/Lecture1/TankExample.h#L89-L90

unique_ptr를 한정된 개수로 모아놓은 vector<unique_ptr<MyBullet>> bullets 으로 총알을 모아놓고 재활용하고 있습니다. 이렇게 렌더링하는 부분에서 반복문을 통해서 하나씩 비어있는지 체크하는 방식이 맞는 방식일가요?


답변 4

·

답변을 작성해보세요.

2

flyweight와는 다른데, 메모리 풀이 사실 최적화 중에서도 가장 까다로운 축에 속합니다. 게임 엔진 관련 서적에서 종종 다룹니다. 꾸준히 공부해나가시다 보면 확 뚫리는 날이옵니다. 특히 자료구조 알고리즘 공부도 슬슬 준비하시면 좋겠습니다.

2

지호손님의 프로필

지호손

질문자

2020.03.19

답변 감사합니다. 메모리 풀을 고려해서 생각해봐야겠네요.  flyweight 패턴같은 것이군요. 좋은 디자인 패턴이네요.

2

보통 코드를 봐드리기는 어려운데 질문이 잘 정리되어 있어서 대답해드리기가 편하네요.

질문 1) 벗어났는지 체크하는 부분은 눈으로 봤을 때 이상하지 않은가가 1차적인 기준이 될거고 총알이 엄청나게 많아서 속도에 부담이 될 정도라면 조금이라도 빨리 없어지게 하는게 이익이겠지요. 정확하게 계산해본다면 물체가 완전히 벗어났을 때 랜더링 되지 않도록 결정해야겠지요. 스케일은 정의하기 나름입니다. 보통은 현실 좌표계와 비슷하게 맞춥니다. 사람 키가 대강 1이나 2 사이에 오게 한다든지.

의문 1) 일단 알고리즘에서 여러가지 더 효율적인 기술들을 배우게 되고 그것들을 응용해서 더 효율적인 메모리 풀(memory pool)을 만들 수 있습니다.

0

지호손님의 프로필

지호손

질문자

2020.03.19

네 감사합니다. :) 슬슬 알고리즘 공부도 시작해보려고 합니다.