godot4.x(2)の覚書です。
カメラ
2D
extends Node2D
#時間の表示
var elapsed_time:float
var elapsed_time_ph:float
@onready var Camera = $Camera2D # カメラ.
#@export var speed = 5
var moveCam: float = 0
const moveTime = 0.5
func _process(delta):
elapsed_time += delta
$elapsed_time.text = "経過時間"+"%7.1f" % elapsed_time
var velocity = Vector2.ZERO
if Input.is_action_pressed("ui_up"):
Camera.position.y -= 100*delta # moveup
if Input.is_action_pressed("ui_down"):
Camera.position.y += 100*delta # movedown
if Input.is_action_pressed("ui_left"):
Camera.position.x -= 100*delta # moveleft
if Input.is_action_pressed("ui_right"):
Camera.position.x += 100*delta # moveright
if Input.is_action_pressed(("ui_select"))|| Input.is_action_pressed(("start")):
# 画面揺らす
Camera.offset = Vector2.ZERO
moveCam -= delta
if moveCam < 0:
var rate = moveCam / moveTime
var vx = 64 * rate
var vy = 16 * rate
Camera.offset.x = randi_range(-vx, vx)
Camera.offset.y = randi_range(-vy, vy)
return
Camera.offset = Vector2.ZERO
moveCam = 0
func _physics_process(delta):
elapsed_time_ph += delta
$elapsed_time_ph.text = "経過時間"+"%7.1f" % elapsed_time_ph
GitHub - WOCae/L002 at r1
Contribute to WOCae/L002 development by creating an account on GitHub.
プレイヤーに固定
カメラをプレイヤーに固定します。(参考:L011 ゲーム構成 プレイヤー)
CameraのノードをPlayerの子にしたので、スクリプトをそのように変更します。
スクリプトの変更箇所は、以前はCameraノードを操作するようにしていた箇所を、
playerのノードへ切り替えます。
@onready var Camera = $Player/Camera2D # カメラ.
@onready var Player = $Player # プレイヤー #追加
#@export var speed = 5
var moveCam: float = 0
const moveTime = 0.5
func _process(delta):
elapsed_time += delta
$elapsed_time.text = "経過時間"+"%7.1f" % elapsed_time
var velocity = Vector2.ZERO
if Input.is_action_pressed("ui_up"):
#Camera.position.y -= 100*delta # moveup
Player.position.y -= 100*delta #追加
if Input.is_action_pressed("ui_down"):
#Camera.position.y += 100*delta # movedown
Player.position.y += 100*delta #追加
if Input.is_action_pressed("ui_left"):
#Camera.position.x -= 100*delta # moveleft
Player.position.x -= 100*delta #追加
if Input.is_action_pressed("ui_right"):
#Camera.position.x += 100*delta # moveright
Player.position.x += 100*delta #追加
if Input.is_action_pressed(("ui_select"))|| Input.is_action_pressed(("start")):
# 画面揺らす
Camera.offset = Vector2.ZERO
moveCam -= delta
if moveCam < 0:
GitHub - WOCae/L002 at r3
Contribute to WOCae/L002 development by creating an account on GitHub.
3D
参考
L101 計算ツール1
godot4.2で計算ツールを作成してみました。 godotモデル 別タブ表示 git L101BeamBend-main.zip 同様のものは以下になります。 作成 プロジェクト設定 このモデルでは、画面サイズの設定をします。メニュー>プ...
ファイルの読み書き
テキストファイルの読み書きを行います。
設定の整理など表計算ソフトで行うと便利です。
extends Node2D
#import File
func _ready():
#ファイルの書込み
var string1 = "testLine1\ntestLine2"
var file1 = FileAccess.open("string.txt", FileAccess.WRITE)
file1.store_string(string1)
file1.close()
#ファイルの読み込み
var file2 = FileAccess.open("data.txt", FileAccess.READ)
var line = file2.get_csv_line()
while line.size() >= 3:
# 横方向の項目数が足りない場合は終了
print("colm1: %s" % line[0])
print("colm2: %s" % line[1])
print("colm3: %s" % line[2])
print("colm4: %s" % line[3])
line = file2.get_csv_line()
file2.close()
#テキストでの読み込み
var file = FileAccess.open("res://data.txt", FileAccess.READ)
var line2 = file.get_as_text()
#print(line.size())
print("line2:\n",line2)
var row1 = line2.split("\n") #行の取得
var colum1 = row1[0].split(",") #列の取得
print("row1:",row1[0])
print("colum1:",colum1[0])
file.close()
GitHub - WOCae/L002 at r2
Contribute to WOCae/L002 development by creating an account on GitHub.
スプライトアニメーション
2コマで犬が歩くアニメーションです。
extends Area2D
func _ready() -> void:
position = Vector2(400,500)
func _process(delta: float) -> void:
$AnimatedSprite2D.animation = &"walk"
$AnimatedSprite2D.play()
GitHub - WOCae/dog
Contribute to WOCae/dog development by creating an account on GitHub.
以下の表題とリビジョンは対応します。
左に移動(r1)
extends Area2D
const SPEED := 15.0
func _ready() -> void:
position = Vector2(400,500)
scale = Vector2(2,2)
func _process(delta: float) -> void:
#$AnimatedSprite2D.animation = &"walk"
#$AnimatedSprite2D.play()
var velocity = Vector2.ZERO
if Input.is_action_pressed("ui_left"):
velocity.x -= 1*delta
$AnimatedSprite2D.animation = &"walk"
$AnimatedSprite2D.flip_h = false
position += velocity.normalized() * SPEED
$AnimatedSprite2D.play()
上下左右に移動(r2)
上下左右のキーを設定して対応するアニメーションを呼ぶようにします。
extends Area2D
const SPEED := 15.0
func _ready() -> void:
position = Vector2(400,500)
scale = Vector2(2,2)
func _process(delta: float) -> void:
#$AnimatedSprite2D.animation = &"walk"
#$AnimatedSprite2D.play()
var velocity = Vector2.ZERO
if Input.is_action_pressed("ui_left"):
velocity.x -= 1*delta
$AnimatedSprite2D.animation = &"walk"
$AnimatedSprite2D.flip_h = false
if Input.is_action_pressed("ui_right"):
velocity.x += 1*delta
$AnimatedSprite2D.animation = &"walk"
$AnimatedSprite2D.flip_h = true
if Input.is_action_pressed("ui_up"):
velocity.y -= 1*delta
$AnimatedSprite2D.animation = &"up"
if Input.is_action_pressed("ui_down"):
velocity.y += 1*delta
$AnimatedSprite2D.animation = &"down"
position += velocity.normalized() * SPEED
$AnimatedSprite2D.play()
干渉(Collision)
Area2D
PlayerはCharacterBody2Dシーン
mobはRigidBody2Dシーン
それぞれのシーンにArea2Dを設定して、干渉した場合を出力します。
GitHub - WOCae/L202
Contribute to WOCae/L202 development by creating an account on GitHub.
サンプルは、コリジョンとパスを表示設定します。
シグナル
干渉物があった場合、クラス名で処理を行います。
クラス名は、それぞれのシーンで宣言しておきます。
コードによる切り替え
1階と2階があるような構造で、階層を接触で表現する場合の切り替え。
RigidBody2Dについて
解除する場合はfalse、適用する場合にはtrueにします。
<Rigid>.set_collision_layer_value(1, false)
<Rigid>.set_collision_mask_value(1, false)
タイルマップ
TileMapシーンを追加、タイルのサイズを32x32に、干渉のレイヤーを設定。
タイルマップ画像(32x32を3行7列)を設定。
任意で一つを選択して、干渉領域を設定します。
タイルマップの編集です。
領域を選択して、Ctrl+C、Ctrl+V、delateで操作できます。
乱数
整数
以下は0から3までの整数をランダムに返します。
配列の引き当てなどに使用します。
randi_range(0,3)
コメント