점프(jump) 기능 구현
페이지정보
내용
점프(jump) 기능 구현
어떤 게임은 플레이어가 점프를 하는 경우가 있다. 이번 강좌에서는 점프를 하는 효과를 알아본다.
점프의 원리를 우선 생각해보자.
바닥에서 점프를 하면 처음에는 힘차게 위로 올라간다. 그리고 점점 속도가 줄어들며 최고점에 이르러서는 더이상 위로 올라가지 않고 다시 아래로 내려온다. 내려올 수록 점점 속도가 빨라지며, 바닥에 도착하면 더이상 밑으로 내려가지 않는다.
1. 점프할때의 위치 좌표 공식
위의 원리를 구현하기 위해 고전역학의 공식을 사용한다.
F = 1/2 * m * v^2 |
F = Force (위/아래 힘)
m = mass (물체의 질량)
v = velocity (속도)
위의 F를 플레이어의 y 좌표에 대입하면 플레이어가 점프하는 효과를 나타낼 수 있다.
2. 좌우로 이동하는 플레이어 만들기
우선 플레이어가 좌우로 이동하는 코드를 만들어 본다.
smallcar.png
import sys
# 게임 화면 크기
# 색상
# 속도와 질량 기본 값 class Car:
def __init__(self):
def load_car(self):
# 자동차를 스크린에 그리기
# x 좌표 이동 - 플레이어 자동차의 움직임 제어할 때 필요
# 화면 밖으로 못 나가게 방지
def main():
# pygame 초기화 및 스크린 생성
clock = pygame.time.Clock()
# 플레이어 자동차 생성
playing = True while playing:
# 화살표 키를 이용해서 플레이어의 움직임 거리를 조정해준다.
if event.type == pygame.KEYUP:
''' 게임 코드 작성 '''
# 플레이어를 스크린에 표시 및 화면 밖으로 못 벗어나게 하기
''' 게임 코드 끝 '''
pygame.display.flip()
# 초당 프레임 설정
|
3. 점프 공식 적용하기
2번의 코드를 이용하면 자동차가 좌우로만 움직이게 된다.
이곳에 점프를 위한 공식을 적용해본다.
스페이스키를 누르면 점프를 하도록 설정해 본다.
1) 속성 추가
Car class의 __init__ 메서드에 점프를 위한 속성을 추가한다.
def __init__(self): self.image = "" self.dx = 0 self.dy = 0 self.rect = "" self.isJump = 0 self.v = VELOCITY # 속도 self.m = MASS # 질량 |
2) 점프 상태를 체크하는 메서드
Car class에 새로운 메서드를 추가한다.
def jump(self, j): self.isJump = j |
3) 점프일 경우 y 좌표를 변경해주는 메서드
역학공식을 적용하여 y 좌표를 위에서 아래로 변경해주는 메서드를 추가한다.
def update(self): # 이 코드를 주석처리하면 이중점프를 못한다.
# 역학공식 계산 (F). F = 0.5 * mass * velocity^2.
# 좌표 수정 : 위로 올라가기 위해서는 y 좌표를 줄여준다.
# 속도 줄여줌
# 바닥에 닿았을때, 변수 리셋 |
4) 스페이스 바를 눌렀을 때, 점프 상태를 변경시켜주는 코드를 게임 루프안에 추가한다.
...... ...... while playing: # 키가 눌린 상태 체크
# 화살표 키를 이용해서 플레이어의 움직임 거리를 조정해준다.
if event.type == pygame.KEYUP:
# 배경색을 흰색으로
''' 게임 코드 작성 '''
# 플레이어를 스크린에 표시 및 화면 밖으로 못 벗어나게 하기 # 플레이어의 y 좌표를 움직여주는 메서드 추가, 점프하는 것 player.update()
''' 게임 코드 끝 '''
...... ...... |
위의 점프를 위한 코드에서 VELOCITY와 MASS 값을 변경해가면서, 자신의 게임에 맞게 점프 높이나 속도를 조절하여 응용해본다.
전체코드
import sys
# 게임 화면 크기
# 색상
# 속도와 질량 기본 값 class Car:
def __init__(self):
def load_car(self):
# 자동차를 스크린에 그리기
# x 좌표 이동 - 플레이어 자동차의 움직임 제어할 때 필요
# 화면 밖으로 못 나가게 방지
def jump(self, j):
def update(self): # 이 코드를 주석처리하면 이중점프를 못한다.
# 역학공식 계산 (F). F = 0.5 * mass * velocity^2.
# 좌표 수정 : 위로 올라가기 위해서는 y 좌표를 줄여준다.
# 속도 줄여줌
# 바닥에 닿았을때, 변수 리셋
def main():
# pygame 초기화 및 스크린 생성
clock = pygame.time.Clock()
# 플레이어 자동차 생성
playing = True while playing: # 키가 눌린 상태 체크
# 화살표 키를 이용해서 플레이어의 움직임 거리를 조정해준다.
if event.type == pygame.KEYUP:
# 배경색을 흰색으로
''' 게임 코드 작성 '''
# 플레이어를 스크린에 표시 및 화면 밖으로 못 벗어나게 하기 # 플레이어의 y 좌표를 움직여주는 메서드 추가, 점프하는 것 player.update()
''' 게임 코드 끝 '''
pygame.display.flip()
# 초당 프레임 설정
|