Menu
CoddyTech

바위 쪼개기

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는 안전한 시점인 프레임 끝에 호출을 실행합니다.

challenge icon

챌린지

어려움
  1. rock.gd에서 var size = 2와 signal broken(rock)을 추가하세요. _ready에서 size를 사용해 스케일을 설정하세요. 총알이 맞으면 self와 함께 broken을 발생시키세요.
  2. main.gd에서 spawn_rock(where, velocity, size)가 바위의 size를 설정하고 broken 신호를 연결하도록 하세요. 처음 생성되는 바위 4개의 크기는 2입니다.
  3. 크기가 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)
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

프로젝트의 모든 레슨

직접 연습해 보세요: Godot 플레이그라운드