@export var to_be_created:PackedScene
var godot:Node
func _ready():
godot = to_be_created.instantiate()
# 將位置移動到畫面中央方便觀察
godot.position = get_viewport().size / 2
add_child(godot)
介紹比例(scale)
Vector2 scale [預設: Vector2(1, 1)]
set_scale(數值) setter
get_scale() getterThe node's scale. Unscaled value: (1, 1).
透過設置這個屬性可以改變物件的比例,當值為負數時會產生反轉的效果。
接著直接在 process 中加入點擊上鍵時增加、點擊下鍵時減少的邏輯。
func _process(delta):
if Input.is_action_pressed("click_up"):
godot.scale += Vector2(0.1, 0.1)
if Input.is_action_pressed("click_down"):
godot.scale -= Vector2(0.1, 0.1)
完整檔案
extends Node
@export var to_be_created:PackedScene
var godot
# Called when the node enters the scene tree for the first time.
func _ready():
godot = to_be_created.instantiate()
godot.position = get_viewport().size / 2
add_child(godot)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if Input.is_action_pressed("click_up"):
godot.scale += Vector2(0.1, 0.1)
if Input.is_action_pressed("click_down"):
godot.scale -= Vector2(0.1, 0.1)
現在我們可以試著將昨天的 Timer 加入,做出自動縮放的效果。
回到我們的事前準備狀態,重新開始。
我們使用在 Day4 介紹過的方法:lerp 來做這次縮放的變化。
先在最前面宣告一個變化目標以及暴露出變化權重。
var target = Vector2(5, 5)
@export var weight = 0.05
接著在 process 中增加我們的變化邏輯並使用剛剛宣告的變數作為目標。
func _process(delta):
godot.scale = godot.scale.lerp(target, weight)
這時候播放就會得到放大的效果。
接著我們定義一個方法來讓 Timer 定時改變我們的目標。
首先在前面宣告一個布林值作為是否放大的判斷。
var is_scale_up = true
接著新增 timeout 要觸發的方法。
func _on_scale_timeout():
# 如果原本是放大則改成縮小,反之亦然。
is_scale_up = !is_scale_up
if is_scale_up:
target = Vector2(5, 5)
else:
target = Vector2(1, 1)
新增完成後,可以設定我們的 Timer 了。
因為這次的物件只會有一個並且是在 ready 時產生,因此 Timer 也同樣在直接寫在 ready 中,這次並沒有設定 one_hit 參數而是直接使用預設值結束時重新開始計時,達到重複縮放的效果。
var timer = Timer.new()
timer.wait_time = 1
timer.timeout.connect(_on_scale_timeout)
godot.add_child(timer)
timer.start()
這樣一來每次倒數結束就可以觸發更改目標的函數。
完整檔案
extends Node
@export var to_be_created:PackedScene
@export var weight = 0.05
var godot
var target = Vector2(5, 5)
var is_scale_up = true
# Called when the node enters the scene tree for the first time.
func _ready():
godot = to_be_created.instantiate()
godot.position = get_viewport().size / 2
add_child(godot)
var timer = Timer.new()
timer.wait_time = 1
timer.timeout.connect(_on_scale_timeout)
godot.add_child(timer)
timer.start()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
godot.scale = godot.scale.lerp(target, weight)
func _on_scale_timeout():
is_scale_up = !is_scale_up
if is_scale_up:
target = Vector2(5, 5)
else:
target = Vector2(1, 1)
:)