물리학 적용: 로컬 임펄스
GameMaker의 물리학 기능을 사용하면 객체에 힘과 중력을 적용할 수 있을 뿐만 아니라 임펄스도 적용할 수 있습니다. 임펄스는 힘과 약간 다르며, 적용되었을 때 즉시 속도와 잠재적으로 토크(또는 "회전")에 영향을 미칩니다. 특히 임펄스를 적용할 지점이 질량 중심과 정렬되지 않은 벡터를 가질 경우 더욱 그렇습니다. (참고: 질량 중심은 반드시 원점과 같지 않습니다!)
이 함수는 인스턴스에 로컬로 임펄스를 적용합니다. 이는 임펄스의 세기와 방향이 인스턴스의 원점(또는 스프라이트가 없을 경우 위치)을 기준으로 계산되며, 게임 룸이나 물리 세계에서의 방향이나 회전은 고려하지 않음을 의미합니다.
예시 설명
아래 이미지를 보면, 개구리가 아래에서 임펄스를 받아 "점프"하는 모습을 볼 수 있습니다. 정확한 임펄스는 xpos/ypos 좌표에 대한 ximpulse/yimpulse의 벡터로 정의됩니다. 이는 임펄스가 xpos/ypos에서 ximpulse/yimpulse까지의 거리로 뉴턴 단위로 계산되며, 방향은 xpos/ypos에서 ximpulse/yimpulse까지의 각도로 결정된다는 것을 의미합니다.
참고: 물리 세계는 모든 계산에 미터를 사용하며, 미터당 픽셀 비율은 룸 편집기에서 정의되거나 physics_world_create()
를 사용하여 설정됩니다.
구문
physics_apply_local_impulse(xpos, ypos, ximpulse, yimpulse)
인수 설명
인수 이름 | 타입 | 설명 |
---|---|---|
xpos | 수치 | 임펄스가 적용될 원점에 대한 x 좌표 |
ypos | 수치 | 임펄스가 적용될 원점에 대한 y 좌표 |
ximpulse | 수치 | 임펄스 벡터의 x 성분 (xpos 좌표에 상대적) |
yimpulse | 수치 | 임펄스 벡터의 y 성분 (ypos 좌표에 상대적) |
반환값
- 없음
예제 코드
if (jump) {
physics_apply_local_impulse(0, 20, 0, 50);
}
위 코드는 변수 "jump"가 true일 경우 인스턴스 원점에 대해 아래에서 위로 30 뉴턴의 힘을 가진 임펄스를 적용합니다.
활용 예제
- 점프 기능 구현
gml if (keyboard_check_pressed(vk_space)) { physics_apply_local_impulse(0, 0, 0, -100); }
- 물체 회전시키기
gml if (rotate) { physics_apply_local_impulse(0, 0, 50, 0); }
- 충돌 시 반응
gml if (collision) { physics_apply_local_impulse(0, 0, -50, 0); }
- 물체를 밀기
gml if (push) { physics_apply_local_impulse(0, 0, 100, 0); }
- 중력 효과 추가
gml physics_apply_local_impulse(0, 0, 0, -9.81);
이러한 예제들은 GameMaker에서 물리학을 활용하여 다양한 상호작용을 구현하는 데 도움이 됩니다.