Godot視差背景視差背景



Godot Parallaxbackground Parallax Background



(エクスポートに失敗しました、効果を見ることができません http://i.scwy.net/it/2020/033016-godot/)

効果はこれです:



033016-godot-01.gif upload.4e448015.gif転送に失敗しました 再アップロード キャンセル

説明:



  1. キャラクターは、自律的に休憩、歩行、または走ることができます。
  2. 左上隅の数字は、彼がどこまで走ったかを識別し、彼が休んでいる、走っている、または歩いていることを確認するためのものです。
  3. タイマーノードを使用すると、彼はいくつかのアクションをランダムに変更でき、バックグラウンドが変更されます。
  4. 背景は、地面、山、雲の3つのレイヤーに分かれています。それらは距離の違いを反映するために異なる移動速度を持っています。

注意:

  1. 視差の背景では、画像がウィンドウの位置をさらに超える必要があります。それ以外の場合は、部分的に空白で表示されます。
  2. ここで最も重要なステートメントは$ bg_ground.scroll_offset.xです。

ノードは次のようになります。

シーンは次のようになります。 033016-godot-03.png upload.4e448015.gif転送に失敗しました 再アップロード キャンセル



重要でないキャラクターアニメーション:

コード

extends Node2D export var speed = 1000 var man_speed = 0 func _ready(): randomize() _on_Timer_timeout() func _process(delta): $bg_ground.scroll_offset.x -= delta * man_speed $bg_mountain.scroll_offset.x -= delta * man_speed/10 $bg_sky.scroll_offset.x -= delta * man_speed/100 $Label.text = str(int($bg_ground.scroll_offset.x)) func _on_Timer_timeout(): var f = randf() if f>0.9: $Animated.play('walk') man_speed = speed / 10 elif f <0.2: $Animated.play('idle') man_speed = 0 else: $Animated.play('run') man_speed = speed

時間の経過に伴う太陽や地面の花など、いくつかのランダムな効果が追加されます。スプライト画像の長方形の配置(x、y、幅、高さ)をランダムにテストしました

033016-godot-02.gif upload.4e448015.gif転送に失敗しました 再アップロード キャンセル

extends Node2D export var speed = 200 var man_speed = 0 var dongzuo = '' var other_rect = [ Rect2(1760,370,80,70),Rect2(1840,370,90,70),Rect2(870,640,120,70),Rect2(510,570,70,70),Rect2(490,960,40,50),Rect2(530,1110,40,50), Rect2(330,1720,60,60),Rect2(1310,10,50,70),Rect2(1380,30,70,90),Rect2(1150,30,60,50),Rect2(1090,50,50,30),Rect2(880,20,160,160), Rect2(670,0,190,180),Rect2(170,160,70,80)] func _ready(): randomize() _on_Timer_timeout() func _physics_process(delta): $bg_ground.scroll_offset.x -= delta * man_speed $bg_mountain.scroll_offset.x -= delta * man_speed/10 $bg_sky.scroll_offset.x -= delta * man_speed/100 for i in range(1,5): $bg_ground.get_child(i).position.x -= delta * man_speed if $bg_ground.get_child(i).position.x 0.9: $Animated.play('walk') man_speed = speed / 10 dongzuo = 'walk' elif f <0.2: $Animated.play('idle') man_speed = 0 dongzuo = 'rest' else: $Animated.play('run') man_speed = speed dongzuo = 'Run' sun_local() func change_other(num): var rnd = int(rand_range(0,len(other_rect))) var obj = $bg_ground.get_child(num) obj.position.x = rand_range(1500,2000) #obj.position.y = 600 - other_rect[rnd].height obj.region_rect = other_rect[rnd] #print(other_rect[rnd].x) # The position of the sun func sun_local(): var time = OS.get_datetime().hour + OS.get_datetime().minute/60.0 $bg_mountain/sun.position = Vector2(time * 100 - 750, abs(12.0-time)*50)