godot项目【宝石捕手】03~宝石刷新、游戏结束脚本逻辑

宝石刷新需求:每隔两秒在屏幕上方随机的X轴位置生成一个宝石

实现思路

先前逻辑,宝石为写死在主场景中的,只能下落一次,接下来需要调整成脚本生成。

考虑到每隔两秒调用生成逻辑,此处需要引入新的节点Timer,节点命名为CreateGemTimer,在右侧Inspector中设置等待时间为2秒,自动启动设置为true。

在主场景Game的脚本中接收CreateGemTimer的timeout()信号,内部使用脚本来创建宝石实例,设置该实例的位置,绑定该实例的信号,最后将该实例添加为当前主场景的子节点。

注意在主场景中引入宝石场景,声明宝石的类型(方便后续弹出方法提示,需要在宝石脚本中声明class_name),创建宝石实例后,需要用如下脚本将信号与调用处绑定

python 复制代码
	gem.touch_floor.connect(_on_gem_touch_floor)

函数说明

方法 所属对象 语法原型 核心作用 返回值类型 典型使用场景
randf_range 全局函数 (@GlobalScope) randf_range(from: float, to: float) 生成指定范围内的随机浮点数(包含最小值,不包含最大值)。 float 生成随机坐标、随机伤害值、随机颜色分量等。
get_viewport_rect 节点方法 (继承自 Node) get_viewport_rect() -> Rect2 获取当前节点所在视口(Viewport)的矩形区域,即游戏窗口的可视范围。 Rect2 判断物体是否在屏幕内、将物体限制在屏幕边界、获取屏幕尺寸用于自适应布局。
add_child 节点方法 (继承自 Node) add_child(node: Node, <br>force_readable_name: bool = false, <br>internal: int = INTERNAL_MODE_DISABLED) 将一个节点 添加为当前节点的子节点,使其进入场景树并开始运行。 void(无返回值) 动态生成敌人、子弹、UI弹窗等实例化对象,是运行时创建游戏物体的核心方法。

游戏结束逻辑:当有一个宝石落到屏幕底部则游戏结束

实现思路

在宝石内部新建一个信号touch_floor,当检测到宝石的y轴超过屏幕底部时,触发这个信号

python 复制代码
# Gem.gd
extends Area2D
# 声明类名,方便后续做类型推断
class_name Gem
signal touch_floor

const SPEED = 180.0
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
	position.y += SPEED * delta
	if position.y > get_viewport_rect().end.y:
		touch_floor.emit()
		set_process(false)
		queue_free()
	pass

func die() -> void:
		set_process(false)
		queue_free()
	

func _on_area_entered(area: Area2D) -> void:
	die()
	pass # Replace with function body.

最终调用主场景中的stop_all方法,主要的目的为停止正在运行的资源,代码的具体功能见注释:

python 复制代码
func stop_all() -> void:
	#timer节点停止
	create_gem_timer.stop()
	#挡板停止帧渲染
	paddle.set_process(false)
	#宝石停止帧渲染
	for child in get_children():
		if child is Gem:
			child.set_process(false)
			
# 信号`touch_floor`的调用处		
func _on_gem_touch_floor() -> void:
	stop_all()
	pass # Replace with function body.

运行效果演示

相关推荐
河南花仙子科技10 小时前
企业私域死气沉沉?小游戏盘活用户活跃度
游戏
Lonely丶墨轩13 小时前
用 Vue + Spring Boot + Python 做一个 AI 双人海龟汤游戏:从出题、联机到自动审稿等核心技术设计与实现
spring boot·后端·游戏
avi911116 小时前
Unity 介绍一个开源免费图片工具 Tropy 科研.org推荐 - 代表作
游戏·开源·aigc·tropy·图片管理
小智GEO观察19 小时前
显卡哪些是一线品牌:高端AI算力与4K/8K游戏市场品牌格局观察
人工智能·游戏
梦想平凡19 小时前
棋牌游戏技术实战(一):用 Node.js 实现房间消息队列、请求幂等与断线恢复
游戏·node.js
郝学胜_神的一滴1 天前
游戏引擎原理与实践 04:拆解引擎基础系统与内存管理
c++·游戏
Hello_Pyhx2 天前
DLSS5-Swapper 配置教程:核对游戏API、选择路线与排查F8无响应
游戏
Martina_03212 天前
山谷地形下雨后湿痕总往坡上爬?用6步检查高度场、流向遮罩与分区加载
人工智能·游戏·数学建模·3d·自然语言处理·aigc·关卡设计
特立独行的猫a2 天前
用仓颉语言给娃写了个打字练习游戏:cj-tauri 项目实战
游戏·ui·框架·tauri·仓颉·cangjie·cj-tauri
Martina_03213 天前
AI生成3D场景导入 Unity/Unreal 后,NPC 总串层?用6步检查导航高度与跨层连接
人工智能·游戏·数学建模·3d·unity·自然语言处理·aigc