godot

L013 ステージ形状


 StaticBody2Dに接触形状を置いてフィールドを作成します。

形状の追加

ポリラインで作成した形状と、他で作成した形状を含ませます。

main.gd

extends Node2D

var map2 = preload("res://map_2.tscn")


func _ready():
	var map2 = map2.instantiate()
	self.add_child(map2)
	
	
	pass

形状の移動(r2)

形状が移動するようにします。

MAP2のシーンに以下のスクリプトを追加します。

map_2.gd

extends StaticBody2D

var velocity = Vector2()
func _process(delta):
	
	velocity.y = 100

	position += velocity * delta

画面外で削除

VisibleOnScreenNotifier2Dシーンを追加します。

func _on_visible_on_screen_notifier_2d_screen_exited():
	queue_free()
	pass # Replace with function body.

リスポーン(r3)

画面外から削除された後に、新しくMAP2を発生させます。
・まず、画面内からMAP2のノードが削除されたか検査します。
検査は、main.gdにツリー名を確認する部分と判定フラグを設けます。
・map2Flag == falseの場合にリスポーンします。

main.gdに追記

var map2Flag:bool

func _process(delta):
	
	var cnt = 0 #MAP2のカウント
	
	#-----ツリーのノード名を検索
	for child in get_children():
		#print(child.name)
		if "MAP2" in child.name:
			cnt += 1
			map2Flag = true
			#print("MAP2" + str(cnt))
	print("個数:" + str(cnt))
	if cnt == 0:
		#print("NoMAP2" )
		map2Flag = false
		pass
	#----------------------

	if map2Flag == false:
		var map2 = map2.instantiate()
		map2.position.x = 400 #出現位置を
		self.add_child(map2)

ランダムな位置にする

スポーンするX位置をランダムにしてみます。map2.position.x = 400を含めて修正します。

	if map2Flag == false:
		var map2 = map2.instantiate()
		map2.position.x = randum(0,800) #出現位置を
		self.add_child(map2)


func randum(min_value,max_value):
	#var random_number = randi(10)
	#print(random_number) # 例:5

	#var min_value = 0
	#var max_value = 800
	var random_number = randi_range(min_value, max_value)
	#print(random_number) # 例:12
	return random_number

繰り返し背景(V1)

背景シーンを設定して画像が循環するようにします。
上下左右キーでカメラを動かして画面を動かします。

extends Node2D

func _ready():
	$Camera2D.position = Vector2(0,0)

var Dpos:float = 1000
func _process(delta: float) -> void:
	var velocity = Vector2.ZERO	
	if Input.is_action_pressed("ui_left"):
		$Camera2D.position.x -= Dpos*delta
		
	if Input.is_action_pressed("ui_right"):
		$Camera2D.position.x += Dpos*delta
	
	if Input.is_action_pressed("ui_up"):
		$Camera2D.position.y -= Dpos*delta
		
	if Input.is_action_pressed("ui_down"):
		$Camera2D.position.y += Dpos*delta

	#$ParallaxBackground/ParallaxLayer/Sprite2D.position.x -= 100*delta

画像はコードでも動かせます。

	$ParallaxBackground/ParallaxLayer/Sprite2D.position.x -= 100*delta

回転(V1_r1)

画像を回転させます。

	$ParallaxBackground/ParallaxLayer/Sprite2D.rotation += 1*delta	

カメラを回すのは未確認。

サンプルデータ

データは形状を整えてます。

Build software better, together
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over...

コメント