关卡控制以及瓦片地图简介

关卡控制以及瓦片地图简介

ahunziinwuxi

2025-08-08 发布49 浏览 · 0 点赞 · 0 收藏

报错并不可怕,有些报错其实并不影响运行和后续导出等工作。

我又来灌水了,这期是现做一款解谜类游戏共有5关。
第一关与第二关
000.gif
第三关
image.png
第四关 走迷宫
image.png
第五关 找规律
image.png
第六关是预留的一个关卡,防止第五关跳关时报错。

主要有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节点。
image.png
再新建一个tileset。因为原先的tilemap节点已弃用。
image.png

设置好tilesize之后,需要在图块中再设置一次。
image.png
image.png
image.png

给墙添加物理层,点击“添加元素”1次。
image.png

选取“绘制。
image.png

添加物理层0:
image.png
设置完成。可以调节蓝色区域修改碰撞形状。
image.png

绘制时需点击tilemap。
image.png
再点击选取图块就可以绘制了。
image.png

需要注意绘制的方式。以及鼠标右键可以取消绘制。
image.png

请前往 登录/注册 即可发表您的看法…