【Godot4自学手册】第十一节主场景和房屋内部场景相互切换

本文介绍了如何在Godot游戏引擎中构建房屋内部场景,包括使用TileMap、动画背景图片和Area2D实现场景切换,以及如何处理角色的进出和场景之间的正确过渡。
摘要由CSDN通过智能技术生成

这节,我主要学习场景切换,主人公进入门口会进入房间内部,这样就需要进行场景切换。这节绘制了一个房屋内部场景,用到的大部分都是上一节内容,新内容搭建动画背景图片,我进行了重点介绍和学习。

一、房屋内部场景搭建

1.新建一个场景,选择Node2D结点,在该节点下添加TileMap结点用于绘制房屋内部场景;添加Camera2D节点,根据相机的大小绘制场景大小。

TileMap结点共设置两层一个是back层,一个是Objec层。back层用于搭建不可碰撞背景,object层用于搭建可碰撞背景物品。最终搭建效果如下:
请添加图片描述

大部分场景搭建在上一节我们都学过了,不知赘述,下面注重介绍一下钟摆的动画背景搭建。

2.搭建动画背景图片

在TileSet面板,选中动画时钟的4张16*16的小图片,在图块选项卡中的选择选项卡下面动画设置,列数写入3,速度设为1,其他不变;Frames中时长全部设置为0.5,具体情况如下:
请添加图片描述

这样设置以后,切换到TileMap选项卡下,绘制图片就可以做成动画了,最终钟表效果如下:
请添加图片描述

二、实现场景切换

在House场景跟结点下添加Area2D结点命名为Door,并在该节点添加CollisionShape2D,碰撞图形选择矩形,并把矩形一道门的位置,具体设置如下:
请添加图片描述

下一步,切换到Door结点,检查器方面切换到结点选项卡,然后双击body_entered结点,在弹出的对话框选择House根节点,点击链接,操作如下:请添加图片描述

点击链接后,会在House脚本中自动添加如下代码:

func _on_door_body_entered(body):
	pass # Replace with function body.

把这段代码修改如下:

func _on_door_body_entered(body):
	if body.name=="Player":
		get_tree().change_scene_to_file("res://Scenes/InnerHouse.tscn")

这段代码就是当主人公与Door碰撞后就会只执行场景转换到房屋内部,预览一下效果:
请添加图片描述

这样就切换到房间内部了,但是切换到房间内部,发现主人公不见了,下面就解决主人公不见的问题。

三、场景切换时如何添加主人公

切换到InnerHouse场景,给根节点添加Marker2D结点,把结点移动到门口位置,如下图所示:
请添加图片描述

给InnerHouse根节点添加InnerHouse脚本,保存到res://Scripts内。然后编写如下代码:

extends Node2D

@onready var playerSpawn = preload("res://Scenes/player.tscn")
func _ready():
	call_deferred("spawn_player")

func spawn_player():
	var player = playerSpawn.instantiate()
	player.global_position = $Marker2D.global_position
	add_child(player)

这段代码,@onready var playerSpawn = preload(“res://Scenes/player.tscn”)表示提前加载player场景。spawn_player函数实现复制一个Player场景,并把放到Marker2D结点位置。这样房间内就有了一个主人公。
下面时限,主人公如何返回主场景。
在InnerHouse场景跟结点下添加Area2D结点命名为InnerhouseDoor,并在该节点添加CollisionShape2D,碰撞图形选择矩形,并把矩形一道门的位置,具体设置如下:
请添加图片描述

下一步,切换到InnerhouseDoor结点,检查器方面切换到结点选项卡,然后双击body_entered结点,在弹出的对话框选择InnerHouse根节点,点击链接,会在InnerHouse脚本中自动添加代码,我进行了修改如下:

func _on_innerhouse_door_body_entered(body):
	get_tree().change_scene_to_file("res://Scenes/main.tscn")

这样主任公就可以返回主场景了,演示一下效果如下:
请添加图片描述

这样就实现了场景的切换,但是通过测试还有两个问题需要解决,一是房间内部没有碰撞,人物可以随意移动;另一个是主人公返回主场景的位置还是错误的默认返回到加载的场景位置,这个留到下一节来解决。
谢谢同学们,下一节再见!

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游戏自学

生活不易,打赏随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值