inflearn logo
강의

講義

知識共有

ホン・ジョンモのゲーム作り練習問題パッケージ

mutiple bullet 관련 질문 드립니다.

480

sim2real

投稿した質問数 1

0

안녕하세요. 좋은 수업 재밋게 잘 듣고 있습니다.

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); 

}

 

이렇게 볼드체 한 부분을 추가해주었는데 왜 화면상에서는 계속 한 발씩만 발사되는지 모르겠습니다.

제가 잘못 알고 있는 부분이 있다거나 힌트를 주시면 감사하겠습니다!

OpenGL C++ oop

回答 2

1

kangminchul

안녕하세요 :)

혹시 몇 강, 몇 분 즈음에서 발생한 질문이신가요?

궁금증이 생긴 구체적인 강좌 명을 알려주시면 빠르게 답변드리겠습니다 :)

감사합니다.

 

(수정) 아마 1.3절을 여쭈어보신 듯 합니다.

아래 부분은 멋지게 잘 수행해주신 듯 하나,

 

vector<MyBullet *> bullet_container;   

 

총알이 발사될 때 새롭게 객체가 만들어져야 합니다.

아래 예시 코드를 참고하여 만들어보세요 :)

 

bullet_container.push_back(new MyBullet); 

bullet_container.back()->center = tank.center; 		

bullet_container.back()->center.x += 0.2f;

bullet_container.back()->center.y += 0.1f;

bullet_container.back()->velocity = vec2(2.0f, 0.0f);

...

 

감사합니다.

0

sim2real

답변 주셔서 감사합니다!

답변 해주신 코드는 컨테이너에 먼저 담고 담긴 원소의 좌표값, 속력을 설정해주는 것으로 보입니다.

제 코드도 이와 매우 동일하지만, 차이점은 먼저 만들어서 좌표값, 속력을 설정하고 담는건데, 제 코드는 왜 총알이 한발 밖에 안나갈까요?? 아래는 if문 코드 전체입니다 ( 컨테이너 선언은 메인 질문에 있으므로 생략 )

 

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(0.1f, 0.0f);

MyBullet* tmp = bullet;

bullet_container.push_back(tmp); 

}

0

kangminchul

MyBullet* tmp = bullet; 

를 하는 과정에서 tmp에 center, center.x, center.y, velocity가 잘 적용되었는지

확인해보시겠어요? 얕은 복사를 하는 과정에서 총알 관련 정보가 tmp에 할당되지 않은 것 같습니다.

0

sim2real

반영해서 했는데도 잘 안되네요 ㅠㅠ 답글 달아보았습니다!

0

sim2real

아하! 그렇군요

얕은 복사를 피하기 위해서 이런식으로 작성해봤는데도 여전하네요.

그리고 선생님께서 올려주셨던 코드로 돌리니까 계속 오류가 뜨는 상황입니다.

문법적으로 틀릴게 없는것 같은데 계속 어디서 문제가 생긴지 모르겠습니다 ㅠㅠ

0

kangminchul

음.. 그렇군요.

전체 코드를 상세하게 보고 싶은데, 혹시 전체 코드를 두 번 압축해서 tegongkang @ gmail. com으로 보내주시겠어요? 오늘이나 내일 오전 중으로 문제 짚어서 답글 달아드리겠습니다 :)

0

sim2real

넵 전송했습니다! 감사합니다

0

kangminchul

답변 드립니다 :) 

(생각보다 단순한 문제였네요..ㅎㅎ)

 

문제는 총알의 위치를 변화시키고, 그려주는 함수가 bullet_container가 아닌

단순히 bullet변수를 update 시키고 draw 했기 때문에 발생했습니다.

 

bullet_container를 만들어 각각의 bullet들을 vector형태로 저장했다면,

bullet_container 안에 있는 모든 총알에 대해 위치를 update 시키고 draw 해야 합니다.

 

그렇기에 아래와 같이 bullet_container 에 대해 순회하며 찍는 과정이 필요합니다.

 

if (!bullet_container.empty())
{
	for (int i = 0; i < bullet_container.size(); i++)  
	{	
		bullet_container.at(i)->update(getTimeStep());  
		bullet_container.at(i)->draw();                
	}
}

 

올바르게 수정한 전체 소스코드는 메일로 답장 드렸습니다.

감사합니다.

0

sim2real

아하..! 제가 공간만 만들어두고, 채워진 총알이 움직이게 하는 코드를 안짯었네요 ㅠㅠ

제가 생각이 짧았습니다. 코드 봐주셔서 정말 감사합니다!

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

0

73

1

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

0

313

1

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

0

425

1

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

1

346

2

예제코드

1

490

2

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

1

642

1

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

0

420

1

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

0

371

1

multimap 질문

0

354

2

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

0

464

1

vcpkg 설치를 했는데

0

682

2

실행 후 화면 꺼짐

0

578

2

예제 파일 실행 시, 에러

1

558

1

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

0

499

1

코드 열었을 때 오류

1

807

3

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

0

335

1

vcpkg 설치 오류

0

593

2

랜덤값 질문입니다.

0

425

1

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

1

423

1

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

0

282

1

multiple bullet 문제

0

316

1

프로그램 실행 순서 질문

0

272

1

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

0

227

1

txt file로부터 키바인딩

0

298

2