將Area2d添加到主場景,
先公開Area2D為公開變量,然后在主場景的檢查器里賦予Area2D場景,
var slime_node = slime_scene.instantiate()
slime_node.position = Vector2(260, randf_range(50, 115))
get_tree().current_scene.add_child(slime_node)
對其初始化,賦予位置及添加到場景里。
場景切換,按鈕觸發(fā)后函數(shù)
var scene = load("res://其他場景名需要帶后綴")
get_tree().change_scene_to_packed(scene)
加載新場景到scene變量,然后改變場景。
新游戲===========================================
新建一個node2D場景為主場景
新建一個CharacterBody2D為角色,命名Player,在節(jié)點下添加一個Sprite2D
將Player拖到主場景節(jié)點下,在文件系統(tǒng)拖動player.tscn 到主場景文字處。
在player.gd里
extends CharacterBody2D
var speed = 80
func move():
var moveDirection = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
velocity = moveDirection * speed? # 直接賦值給類屬性 velocity
func _physics_process(delta: float) -> void:
move() # 調(diào)用輸入映射
move_and_slide() # 移動角色位置
如果要用ASDW移動需要到項目設(shè)置里的鍵位映射設(shè)置。
給Camera2D 綁定個腳本
使其視角范圍在tileMapLayer的方塊內(nèi)

在Camera2D里的代碼:
extends Camera2D
@export var layer: TileMapLayer? ?#公開TileMapLayer
func _ready() -> void:? ?#初始化代碼
???
?var mapRect = layer.get_used_rect()? # 返回地圖包圍的矩形,
????var cell_pos = Vector2i(2, 3)
? ??print("該位置瓦片源ID:", ????layer.get_cell_source_id(cell_pos))
? ??print("瓦片坐標(biāo):",layer.get_cell_atlas_coords(cell_pos))
????var tileSize = ????layer.get_cell_atlas_coords(cell_pos)
????var worldSIzeInPixels = mapRect.size * tileSize
????limit_right = worldSIzeInPixels.x + 7
????limit_bottom = worldSIzeInPixels.y + 10
教程里的代碼太亂了,自己整理了一下,有些琢磨半天發(fā)現(xiàn)沒用上。
更正后的代碼:
#var cell_pos = Vector2i(0, 0) #print("網(wǎng)格在圖塊里的源ID:", #layer.get_cell_source_id(cell_pos)) #print("網(wǎng)格的圖塊坐標(biāo):", #layer.get_cell_atlas_coords(cell_pos))
上邊這個用不上,但以后可能需要用掉所以不刪除,僅注釋掉
# 返回Rect2i類型,其類型有position,end,size屬性
# 獲取layer已使用區(qū)域的網(wǎng)格坐標(biāo)范圍(Rect2i)
var mapRect = layer.get_used_rect()
# 獲取單個網(wǎng)格像素大小
var tileSize = layer.tile_set.tile_size
# 網(wǎng)格坐標(biāo) * 單個網(wǎng)格像素 = layer的像素坐標(biāo)
var worldPositionInPixels = mapRect.position * tileSize
# 網(wǎng)格數(shù) * 單個網(wǎng)格像素 = layer的總像素大小
var worldSIzeInPixels = mapRect.size * tileSize
limit_left = worldPositionInPixels.x
limit_top = worldPositionInPixels.y
# 世界的總x + 坐標(biāo)x = 世界絕對x
limit_right = worldSIzeInPixels.x + worldPositionInPixels.x
# 世界的總y + 坐標(biāo)y = 世界絕對y
limit_bottom = worldSIzeInPixels.y + worldPositionInPixels.y
print("layer_x : ", worldPositionInPixels.x, " layer_y : ", worldPositionInPixels)
print("layer_w + layer_x = ", limit_right, "\nlayer_h + layer_y = ", limit_bottom)

