今回はスロー再生(ゲームスピードをゆっくりにする)方法を紹介します。
_process() の delta の値を乗算する
特定のオブジェクトのみスローにする場合はこの方法を使います。更新関数である _process() の引数 “delta” に 1.0 以下の係数を乗算することで減速できます。
以下サンプルコードです。
extends Node2D
const SPEED = 2000 # 移動速度
var _velocity = Vector2(0, 0) # 移動速度
func _ready() -> void:
# ランダムで移動量を決める.
_velocity.x = rand_range(-1, 1)
_velocity.y = rand_range(-1, 1)
func _process(delta: float) -> void:
if position.x < 0:
position.x = 0
_velocity.x *= -1 # X反転
if position.y < 0:
position.y = 0
_velocity.y *= -1 # Y反転
if position.x > 1024:
position.x = 1024
_velocity.x *= -1 # X反転
if position.y > 600:
position.y = 600
_velocity.y *= -1 # Y反転
var speed = SPEED
if Input.is_action_pressed("ui_accept"):
# スペースキーを押していたらスローにする
speed *= 0.1
position += _velocity * speed * delta
ただ、この方法は物理オブジェクトで position の値を直接変更してはいけない場合は使用できないかもしれません。(move_and_slide() などの場合は 移動ベクトルを渡して更新するので、基本的には大丈夫そうですが念のため……)
Engine.time_scale でまとめて変更する場合
Engine.time_scale に値を代入することで、ゲーム全体のタイムスケールを変更します(こちらは個別に変更することはできないので、例えば敵弾だけスローにする…ということはできません)
この値を 1.0 より小さくすることでスローにすることができます。
extends Node2D
func _process(delta: float) -> void:
# まとめてタイムスケールを変更する場合.
Engine.time_scale = 1
if Input.is_action_pressed("ui_accept"):
Engine.time_scale = 0.1
プロジェクトファイル
今回作成したプロジェクトファイルを添付しておきます。