inflearn logo
강의

Course

Instructor

Hong Jung-mo's Game Development Practice Problem Package

3.1 Ball bouncing simulation

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

Resolved

282

bluechanha2615

2 asked

0

안녕하세요 교수님.
벽에 부딪힐 때 작성하는 if 문안에 <=(>=)대신 == 을 넣으면 공이 투과하는 이유가 무엇일까요
컴퓨터가 연속적이지 않기 때문에, 혹시 pos.x 가 정확히 0.9f를 지나지 않을 수 있다고 생각해서, cout을 써서 실시간으로 x좌표를 찍어보니, 0.9를 지날 때도 있고, 안지날 때도 있었습니다.
그런데 0.9가 찍힐때도 벽을 투과 하는 이유를 모르겠습니다.
감사합니다.

OpenGL oop C++

Answer 1

1

sohyun

안녕하세요 

답변은 교수님 대신 거의 제가 드리고 있습니다!

강의 시간대, 혹은 코드를 첨부해주실 수 있을까요?  (항상 질문글에 함께 기재해주실 것을 부탁드립니다!) 

혹시 if (1.0f - pos.x <= radius) 이 부분 말씀하시는건가요? == 로 하면 공이 투과된다는 말씀이시죠?

== 로 한다면 정말 1.0f - pos.x 와 radius 가 동일할 때, 즉 공의 경계선이 정말 딱 벽 위치와 일치할 때라는게 되는건데

pos.x 는 실수이기에 이렇게 딱 떨어지게 일치하게 된다는게 힘듭니다.

 더군다나 게임은 프레임단위로 실행이 됩니다. 30프레임이면 1초에 30번씩 실행이 된다는건데요! 1초에 30번씩 딱딱 끊어져 움직이기에 1.0f -pos.x == radius 가 되는 것은 더더욱 힘듭니다. 그래서 의도치않게 아주 살짝 벽 범위를 공이 침범하는 경우가 있을 수밖에 없어요.(살짝 투과) 이전 프레임에선 투과가 안됐었는데 다음 프레임에서는 살짝 투과가 될 수 있는 것이죠. 이런 것들조차, 즉 1.0f - pos.x < radius 가 된 이러한 것들조차 잡아내어 튕겨지도록 처리를 해야하는거에요,

그렇기에 == 로 했을때 이렇게 한번 딱 걸리지 않으면 그 이후론 이 if 에 걸리지 못하기에 튕겨져나가는 처리가 되지 못하고 그냥 투과되는거에요. 반면에 <= 로 하면 살짝 투과가 된거라도 잡아내어 이에 따라 튕겨져나가도록 조건 처리를 할 수 있죠.

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

0

73

1

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

0

313

1

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

0

424

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

mutiple bullet 관련 질문 드립니다.

0

480

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

multiple bullet 문제

0

316

1

프로그램 실행 순서 질문

0

272

1

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

0

227

1

txt file로부터 키바인딩

0

298

2