
关卡控制以及瓦片地图简介
2025-08-08 发布49 浏览 · 0 点赞 · 0 收藏
报错并不可怕,有些报错其实并不影响运行和后续导出等工作。
我又来灌水了,这期是现做一款解谜类游戏共有5关。
第一关与第二关
第三关
第四关 走迷宫
第五关 找规律
第六关是预留的一个关卡,防止第五关跳关时报错。
主要有global脚本、关卡脚本、enemy_1、player、机关脚本。
其中global脚本控制关卡,其他脚本则可以通过修改global脚本提供的参数进行关卡修改。默认失败会回到第一关。
global脚本如下:
extends Node
var next_level:bool
var now_level:int
var levels:Array = [load("res://level/level_1.tscn"),load("res://level/level_2.tscn"),load("res://level/level_3.tscn")
,load("res://level/level_4.tscn"),load("res://level/level_5.tscn"),load("res://level/level_6.tscn")]
func _process(delta: float) -> void:
#如果收到通关信号
if next_level:
next_level = false
now_level += 1
#关闭原先的场景
get_tree().current_scene.queue_free()
var new_level = levels[now_level].instantiate()
get_tree().root.add_child(new_level)
#重新设置主场景
get_tree().current_scene = new_level
print(get_tree().current_scene)
pass
通关终点机关使用的脚本如下:
只需要控制global的通关信号即可。
extends Node2D
func _on_area_2d_body_entered(body: Node2D) -> void:
if body is player:
#发出通关信号
global.next_level = true
pass # Replace with function body.
陷阱机关:
extends Node2D
var body_inside = []
func _on_area_2d_body_entered(body: Node2D) -> void:
body_inside.append(body)
pass # Replace with function body.
func _process(delta: float) -> void:
if $".".visible:
for i in body_inside:
i.queue_free()
func _on_area_2d_body_exited(body: Node2D) -> void:
body_inside.erase(body)
pass # Replace with function body.
关卡脚本process中判定player的代码:
如果不存在player,跳回第一关(now_level为0,此处写-1是因为global.gd中会+1)
func _process(delta: float) -> void:
if !has_node("player"):
global.now_level = -1
global.next_level = true
关于瓦片地图制作:
需要使用tilemaplayer节点。
再新建一个tileset。因为原先的tilemap节点已弃用。
设置好tilesize之后,需要在图块中再设置一次。
给墙添加物理层,点击“添加元素”1次。
选取“绘制。
添加物理层0:
设置完成。可以调节蓝色区域修改碰撞形状。
绘制时需点击tilemap。
再点击选取图块就可以绘制了。
需要注意绘制的方式。以及鼠标右键可以取消绘制。
请前往 登录/注册 即可发表您的看法…