大きな岩と小さな岩
CoddyのGodotジャーニー「プロジェクト」セクションの一部。レッスン 19/36。
大きな岩だけが分裂するようにします。各岩にsizeを設定します。大きい岩は2、小さい岩は1です。rock.gdの_readyで、その値を使って描画します。scale = Vector2.ONE * size * 0.5。
spawn_rockにもサイズを渡します。add_child(rock)を呼び出す前にrock.sizeを設定します。_readyはadd_childの内部で実行されるため、その後にサイズを設定しても、拡大縮小には間に合いません。
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)小さな岩は分裂せず、そのまま壊れます。
チャレンジ
難しい大きな岩は分裂し、小さな岩は壊れるようにしましょう。
rock.gdにvar size = 2を追加し、_readyでscale = Vector2.ONE * size * 0.5を設定します。spawn_rockにsizeを渡し、add_childの前にrock.sizeを設定します。最初の4個には2を指定します。rock.size == 2の場合にのみ、サイズ1の岩2個に分裂させます。
「プレイ」を押して撃ちましょう。大きな岩は分裂し、小さな岩は壊れます。その後、「確認」を押します。
自分で試してみよう
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
rock.broken.connect(_on_rock_broken)
add_child(rock)
func _on_rock_broken(rock):
spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5)
spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5)
プロジェクトのすべてのレッスン
自分で練習してみよう: Godotプレイグラウンド