콘텐츠로 이동

함수와 이벤트 처리 - 기본 개념 이해하기


기본 개념 이해하기

🧩 객체(Object)란? (복습)

객체(Object)란?

  • 속성과 행동을 함께 가진 레고 블록 같은 단위입니다.
  • 변수는 속성을, 함수는 행동 설명서를 담고, 객체는 둘을 합친 형태입니다.
  • Ursina의 Entity는 model, color, scale 같은 속성과 animate_position() 같은 메서드를 가진 객체입니다.

update() 함수란?

update() 함수는 게임이 실행되는 동안 매 프레임마다 자동으로 호출되는 특별한 함수입니다. 게임은 보통 초당 60프레임(FPS)으로 실행되므로, update() 함수는 1초에 60번 호출됩니다!

def update():
    # 이 안의 코드는 매 프레임 실행됩니다
    player.x += 0.1  # 플레이어가 계속 오른쪽으로 이동

update()의 활용

update() 함수는 다음과 같은 작업에 사용됩니다:

  • 이동: 캐릭터나 총알을 매 프레임 조금씩 이동
  • 충돌 검사: 매 프레임 객체들이 부딪혔는지 확인
  • 입력 확인: 키가 계속 눌려있는지 확인 (held_keys)
  • 애니메이션: 객체의 상태를 지속적으로 변경

Sequence란?

Sequence는 여러 동작을 순서대로 실행하는 객체입니다. 마치 음악 재생 목록처럼, 정해진 순서대로 동작을 실행합니다.

# 동작1 → 대기 → 동작2 → 대기 → ... (반복)
my_sequence = Sequence(
    Func(do_something),  # 함수 실행
    Wait(0.5),           # 0.5초 대기
    loop=True            # 무한 반복
)
my_sequence.start()      # 시퀀스 시작
구성 요소 설명 예시
Func() 실행할 함수를 감쌉니다 Func(shoot)
Wait() 지정한 시간만큼 대기합니다 Wait(0.1) - 0.1초 대기
loop=True 시퀀스를 무한 반복합니다 -

Sequence vs update()

  • update(): 매 프레임(초당 60번) 실행됩니다
  • Sequence: 원하는 간격으로 실행할 수 있습니다 (예: 0.1초마다)

input() 함수란?

input() 함수는 키보드나 마우스 입력이 발생했을 때 자동으로 호출되는 함수입니다.

def input(key):
    if key == 'space':        # 스페이스바를 누르면
        print("점프!")
    if key == 'space up':     # 스페이스바를 떼면
        print("착지!")

input() vs held_keys

  • input(key): 키를 누르거나 뗄 때 한 번 호출됩니다
  • held_keys['키이름']: 키가 계속 눌려있는지 확인합니다 (True/False)
# input()에서 점프 시작
def input(key):
    if key == 'space':
        start_jump()

# update()에서 이동 처리
def update():
    if held_keys['w']:  # W가 눌려있으면
        player.y += speed * time.dt

time.dt란?

time.dt는 이전 프레임과 현재 프레임 사이의 시간 간격(초)입니다. 컴퓨터 성능에 관계없이 일정한 속도로 이동하게 해줍니다.

# 나쁜 예: 컴퓨터마다 속도가 다름
player.x += 0.1

# 좋은 예: 모든 컴퓨터에서 같은 속도
player.x += speed * time.dt  # 초당 speed만큼 이동