将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)
对其初始化,赋予位置及添加到场景里。
场景切换,按钮触发后函数
var scene = load("res://其他场景名需要带后缀")
get_tree().change_scene_to_packed(scene)
加载新场景到scene变量,然后改变场景。
新游戏===========================================
新建一个node2D场景为主场景
新建一个CharacterBody2D为角色,命名Player,在节点下添加一个Sprite2D
将Player拖到主场景节点下,在文件系统拖动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() # 调用输入映射
move_and_slide() # 移动角色位置
如果要用ASDW移动需要到项目设置里的键位映射设置。
给Camera2D 绑定个脚本
使其视角范围在tileMapLayer的方块内
在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("瓦片坐标:",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
教程里的代码太乱了,自己整理了一下,有些琢磨半天发现没用上。
更正后的代码:
#var cell_pos = Vector2i(0, 0) #print("网格在图块里的源ID:", #layer.get_cell_source_id(cell_pos)) #print("网格的图块坐标:", #layer.get_cell_atlas_coords(cell_pos))
上边这个用不上,但以后可能需要用掉所以不删除,仅注释掉
# 返回Rect2i类型,其类型有position,end,size属性
# 获取layer已使用区域的网格坐标范围(Rect2i)
var mapRect = layer.get_used_rect()
# 获取单个网格像素大小
var tileSize = layer.tile_set.tile_size
# 网格坐标 * 单个网格像素 = layer的像素坐标
var worldPositionInPixels = mapRect.position * tileSize
# 网格数 * 单个网格像素 = layer的总像素大小
var worldSIzeInPixels = mapRect.size * tileSize
limit_left = worldPositionInPixels.x
limit_top = worldPositionInPixels.y
# 世界的总x + 坐标x = 世界绝对x
limit_right = worldSIzeInPixels.x + worldPositionInPixels.x
# 世界的总y + 坐标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)