2025-04-27/TileMapLayer

将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的检查器里设置

在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)



Rect属性


区别
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容