直接進入正題 coding 的環節
@export var to_be_created:PackedScene
func _ready():
godot = to_be_created.instantiate()
add_child(godot)
var transform_position = Vector2.ZERO
if Input.is_action_pressed("click_up"):
# 觸發後要執行的邏輯
if Input.is_action_pressed("click_up"):
transform_position.y -= 1
godot.position += transform_position
此時播放後即可透過方向鍵讓物件向上移動
if Input.is_action_pressed("click_down"):
transform_position.y += 1
if Input.is_action_pressed("click_left"):
transform_position.x -= 1
if Input.is_action_pressed("click_right"):
transform_position.x += 1
完成! 現在可以透過方向鍵自由移動我們的 godot icon
以上面的方法來操作當我們同時按住了兩軸的,例如上和右這時會一次性的移動根號2的單位距離(上1、右1),要改善這個問題的話我們使用正規化的方式來統一一次能移動的距離。
if transform_position.length() > 0:
# t_p = t_p/t_p.length()
transform_position = transform_position.normalized()
最後的最後如果想要移動快一點,我們再暴露一個 speed 變數來放大一次移動的距離
# 前面新增變數
@export var speed:float=1
# process 更新
if transform_position.length() > 0:
transform_position = transform_position.normalized() * speed
現在可以透過腳本的屬性面板調整 speed 變數改變移動距離
完整檔案
extends Node
@export var to_be_created:PackedScene
@export var speed:float=1
var godot:Node
# Called when the node enters the scene tree for the first time.
func _ready():
godot = to_be_created.instantiate()
add_child(godot)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
var transform_position = Vector2.ZERO
if Input.is_action_pressed("click_up"):
transform_position.y -= 1
if Input.is_action_pressed("click_down"):
transform_position.y += 1
if Input.is_action_pressed("click_left"):
transform_position.x -= 1
if Input.is_action_pressed("click_right"):
transform_position.x += 1
if transform_position.length() > 0:
transform_position = transform_position.normalized() * speed
godot.position += transform_position
:)