바위 쪼개기
Coddy Godot 여정의 프로젝트 섹션에 포함된 레슨. 33개 중 16번째.
큰 바위는 작은 바위 두 개로 쪼개져야 합니다. 각 바위에 size를 지정하세요. 큰 바위는 2, 작은 바위는 1입니다. rock.gd의 _ready에서 scale = Vector2.ONE * size * 0.5로 설정하세요.
바위는 signal broken(rock)과 broken.emit(self)을 사용해 부서졌음을 알립니다. self는 바위입니다. 이제 spawn_rock은 크기를 인수로 받고 신호를 연결합니다.
func _on_rock_broken(rock):
if rock.size == 2:
spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5, 1)
spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5, 1)Godot이 어떤 영역들이 서로 닿는지 확인하는 도중에 신호가 도착합니다. 이때 영역을 추가하면 쿼리를 처리하는 동안에는 이 상태를 변경할 수 없습니다라는 메시지와 함께 게임이 중단됩니다. call_deferred는 안전한 시점인 프레임 끝에 호출을 실행합니다.
챌린지
어려움rock.gd에서var size = 2와signal broken(rock)을 추가하세요._ready에서size를 사용해 스케일을 설정하세요. 총알이 맞으면self와 함께broken을 발생시키세요.main.gd에서spawn_rock(where, velocity, size)가 바위의size를 설정하고broken신호를 연결하도록 하세요. 처음 생성되는 바위 4개의 크기는 2입니다.- 크기가 2인 바위가 부서지면, 그 위치에 크기가 1인 바위 두 개를
call_deferred로 생성하세요. 바위들의 속도는 기존 속도를 각각0.8과-0.8만큼 회전한 다음1.5를 곱한 값입니다.
직접 해보기
extends Node2D
const ROCK = preload("res://rock.tscn")
func _ready():
for i in 4:
spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)))
func spawn_rock(where, velocity):
var rock = ROCK.instantiate()
rock.position = where
rock.velocity = velocity
add_child(rock)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
프로젝트의 모든 레슨
직접 연습해 보세요: Godot 플레이그라운드