콘텐츠로 이동

함수와 이벤트 처리 - 퀴즈


퀴즈: 함수와 이벤트 처리 이해하기

퀴즈 1: update() 함수

퀴즈: update() 함수
update() 함수는 언제 호출되나요?
정답 보기

정답: B) 매 프레임마다 자동으로

update() 함수는 게임이 실행되는 동안 매 프레임마다 자동으로 호출됩니다. 게임이 60FPS로 실행되면, 1초에 60번 호출됩니다!

def update():
    # 이 코드는 매 프레임 실행됩니다
    player.x += speed * time.dt

퀴즈 2: Sequence의 구성

퀴즈: Sequence의 구성
탄막이 계속 발사되도록 도와주는 객체는 무엇인가요?
정답 보기

정답: B) Sequence(Func(shoot), Wait(...), loop=True)

Sequence는 여러 동작을 순서대로 실행합니다:

shoot_sequence = Sequence(
    Func(shoot),       # 1. shoot 함수 실행
    Wait(0.1),         # 2. 0.1초 대기
    loop=True          # 3. 다시 1번으로 (무한 반복)
)

퀴즈 3: time.dt 사용 이유

퀴즈: time.dt 사용 이유
player.position += direction * speed * time.dt에서 time.dt를 사용하는 이유는?
정답 보기

정답: C) 컴퓨터 성능에 관계없이 일정한 속도로 이동하기 위해

time.dt는 프레임 사이의 시간 간격입니다.

  • 60FPS 컴퓨터: time.dt ≈ 0.0167초
  • 30FPS 컴퓨터: time.dt ≈ 0.0333초

time.dt를 곱하면 어떤 컴퓨터에서든 초당 같은 거리를 이동합니다!

퀴즈 4: input 함수의 키 이벤트

퀴즈: 키 이벤트
스페이스바를 **뗐을 때** 발생하는 키 이벤트 이름은 무엇인가요?
힌트: "키이름 up" 형식입니다.
정답 보기

정답: space up

키보드 입력 이벤트는 두 종류가 있습니다:

def input(key):
    if key == 'space':      # 키를 누를 때
        print("눌렀다!")
    if key == 'space up':   # 키를 뗄 때
        print("뗐다!")

다른 키도 마찬가지입니다: 'a', 'a up', 'w', 'w up'

퀴즈 5: 메쉬 업데이트

퀴즈: 메쉬 업데이트
메쉬의 vertices 리스트를 변경한 후, 화면에 반영하기 위해 호출해야 하는 함수 이름은?
정답 보기

정답: generate

메쉬의 정점(vertices)을 변경한 후에는 반드시 generate()를 호출해야 합니다:

# 정점 추가
mesh.vertices.append(Vec3(0, 0, 0))

# 정점 삭제
mesh.vertices.remove(some_vertex)

# 변경사항을 화면에 반영
mesh.generate()  # 이 줄이 없으면 화면이 업데이트되지 않습니다!

다음 단계

축하합니다! 이제 함수와 이벤트 처리의 핵심 개념을 이해했습니다.

이번 강의에서 배운 것:

  • update() 함수로 매 프레임 코드 실행하기
  • Sequence, Func, Wait로 반복 동작 만들기
  • input() 함수로 키보드 입력 처리하기
  • 메쉬의 정점(vertices)을 조작하여 파티클 효과 만들기

연습해보세요!

코드를 실행하고 다양한 값을 바꿔보세요!

# 발사 간격 변경
shoot_cooldown = .05  # 더 빠른 발사 (0.1 → 0.05)

# 플레이어 속도 변경
player.speed = 12  # 더 빠른 이동 (8 → 12)

# 총알 색상 변경
player.bullet_renderer.color = color.red  # 빨간색 총알

이렇게 작은 변경으로 게임의 느낌이 완전히 달라집니다!

도전 과제

다음 기능을 추가해보세요:

  1. 적 추가하기: enemies.append()로 더 많은 적 만들기
  2. 점수 시스템: 적을 처치하면 점수 증가
  3. 폭발 효과: 적이 죽을 때 파티클 효과 추가
# 점수 시스템 예시
score = 0
score_text = Text(text='Score: 0', position=(-0.85, 0.45))

# 적 처치 시 점수 증가
if enemy.hp <= 0:
    score += 100
    score_text.text = f'Score: {score}'
🧩 객체(Object) 개념 복습
  • 객체는 레고 블록처럼 속성과 행동을 함께 가진 존재입니다.
  • 변수는 값을 담는 포스트잇, 함수는 행동 설명서, 객체는 둘을 합친 장난감입니다.
  • Ursina의 Entity도 객체: model, color, scale 같은 속성과 animate_position() 같은 행동을 함께 가집니다.
  • 리스트에 객체를 넣으면 필요할 때 꺼내 쓰고 일괄 처리할 수 있는 바구니가 됩니다.