Keyword
-
Acceleration
-
Vector Operation
물체의 움직임을 변화시키는 것은 외부 영향이다. 앞서 정의한 벽에 부딪힐 경우 물체의 진행 방향이 변경되는 것 또한 외부 영향이며, 게임 환경에서는 물체의 움직임에 영향을 줄 수 있는 다양한 요소들의 추가가 가능하다.
우리가 목표로 하는 대포게임은 대포를 쏘아 상대방 목표물을 맞히는 것이다. 실제 환경에 대포에 의해 발사된 포탄은 바람, 중력, 공기 저항 등 다양한 요소들의 영향을 받는다.
이에 따라 우리가 만드는 게임에서는 중력과 바람의 영향을 넣어 보도록 한다.
이들은 특정 값으로 설정되기보다는 포탄이 날아가는 단위 시간 동안 일정량의 영향을 주는 형태로 표현될 것이다.
일반적으로 이는 오브젝트의 이동에 영향을 주는 외부 효과라 할 수 있다.
외부 효과는 world 내에서 물체에 영향을 주지만, 변화량과 같이 고정되지 않고 추가되는 성질을 가지고 있다.
기존의 변화량은 단위 시간당 변화량과 같이 지속해 같은 영향을 주기보다는 물체가 움직일 때마다 추가적인 영향을 줌으로써 물체가 가지고 있는 단위 시간당 변화량의 변화를 준다.
외부 효과도 물체의 이동과 관계되므로 Motion을 이용해 표현할 수 있다.
참고
-
속도
\begin{align*} v = {dx \over dt} \end{align*}-
물체의 속도와 운동 방향으로 물체의 단위 시간당 위치 변화를 나타낸다.
-
시간이 지남에 따라 물체의 위치가 변경된다.
-
-
가속도
\begin{align*} a={dv \over dt} \end{align*}-
속도의 변화로써 물체의 단위 시간당 속도 변화를 나타낸다.
-
시간이 지남에 따라 물체의 속도가 변경된다.
-
ball이나 box가 움직일 때, 외부 효과를 추가하기 위해서는 Movable 인터페이스에 외부 효과를 주면서 움직일 수 있는 함수를 추가하고, 각각의 class에서 함수를 구현한다.
MovableWorld에는 외부 효과를 추가하여 관리할 수 있도록 필드와 함수를 추가한다.
기능 추가를 위해 다음 함수를 추가한다.
Method
-
외부 효과를 추가한다.(addEffect)
-
외부 효과는 0개 이상 적용될 수 있다.
-
-
추가된 외부 효과의 수를 반환한다(getEffectCount)
-
외부 효과를 가져온다(getEffect)
-
외부 효과를 제거한다(removeEffect)
MovableWorld에 추가된 함수들을 구현한다.
-
중력 가속도(\(g\))는 \(a=-9.8 {m \over {s^2}}\) 로 변화량 계산에 추가하기 위해서는 복잡하다.
-
여기서, 이를 단순화시켜서 단위 시간당 일정한 변화량을 추가하는 것으로 정리한다. 다만, 방향에는 주의하자.
-
\(g\) 는 Y축의 음수 방향으로 가해지는 변화량이다.
-
-
물체가 충돌하기 전후의 속도 비율을 나타내는 분수
-
1은 완전 탄성 충돌을 의미
-
예를 들어, 골프공의 반발 계수는 0.7 근처