当前位置: 首页 > news >正文

godot项目【宝石捕手】02~脚本初始化

宝石(Gem)移动脚本编写

宝石下坠逻辑实现

修改position.y实现重力下坠的效果

检测宝石是否移动到屏幕外面了

首先,确认我们屏幕的大小,如何确认屏幕的大小?
可以根据godot提供的尺子模式量一下,或者打开网格进行初步的检测就能够定下来。
当gem移动到屏幕外边后节省资源的措施
一、停止gem的移动,可以节省cpu资源
使用set_process(false)实现功能
二、将gem资源释放掉
使用queue_free()来实现功能,并不是马上消失,当我们的游戏场景中有很多的元素时,可能会发生预料之外的问题。
可以在游戏运行过程中观察Remote窗口,可以看见节点确实被删除了

额外的优化

一、提取代码中对数值的硬编码
1.优化步骤一:将数值的硬编码优化为常量,单个脚本同一维护,起了变量名
2.考虑到用户的屏幕大小不一定是统一的,需要能够动态的获取屏幕的大小,用代码动态获取窗口的大小
(1)介绍一下Rect2的属性
①position 是窗口的左上角
②end 是窗口的右下角
(2)使用get_viewport_rect().end.y来代替底部的数值
最终,宝石下坠,以及检测运动到屏幕底部然后消失的逻辑实现如下:

extends Area2D const SPEED=100.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*deltaifposition.y>get_viewport_rect().end.y:set_process(false)queue_free()pass

挡板(Paddle)移动脚本编写

新建输入映射

在项目设置里的input map,可以在里面添加action
然后将这些action与具体的键位输入进行绑定,此处我们将move_leftaction绑定了键盘A键,将move_rightaction绑定了键盘D键,这些action能够在后续的GD脚本中识别到使用。

脚本编写

实现挡板的简单左右移动,在func _process(delta: float) -> void:内添加逻辑

ifInput.is_action_pressed("move_left"):position.x-=SPEED*deltaifInput.is_action_pressed("move_right"):position.x+=SPEED*delta

增加需求:如何限制paddle的移动范围,让其不越过显示区域?
不需要手动实现,使用godot内部提供的函数clampf即可实现,增加逻辑

#用clampf函数来限制即可position.x=clampf(position.x,get_viewport_rect().position.x,get_viewport_rect().end.x)

进一步优化输入脚本

使用Input.get_axis()进一步优化,将四行优化成两行,完整代码

extends Area2D const SPEED=300.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:#if Input.is_action_pressed("move_left"):#position.x -= SPEED * delta#if position.x < get_viewport_rect().position.x:#set_process(false)#if Input.is_action_pressed("move_right"):#position.x += SPEED * delta#if position.x > get_viewport_rect().end.x:#set_process(false)var action=Input.get_axis("move_left","move_right")position.x+=action*SPEED*delta#用clampf函数来限制即可position.x=clampf(position.x,get_viewport_rect().position.x,get_viewport_rect().end.x)pass

效果演示

http://www.jsqmd.com/news/1364858/

相关文章:

  • League Akari:终极免费开源英雄联盟自动化助手,全面提升你的游戏体验
  • IwaraDownloadTool终极指南:一键下载Iwara视频的完整解决方案
  • C++20概念:编译期类型契约,提升泛型编程安全与表达力
  • 谷歌25%新代码由AI生成,会Prompt工程的程序员更吃香了
  • 状态压缩DP实战:从旅行商问题到最短超串算法详解
  • 2026年双碳目标适配的危废减量焚烧炉技术方案甄选指南 - geo交流
  • BetterGenshinImpact自动化工具:如何用智能AI解放你的原神游戏时间
  • ABAP开发中尾随空格问题的深度解析与解决方案
  • 千元预算搭建ROS2与Webots开发环境实战指南
  • 零基础转行数字化,如何挑选高含金量 AI 证书?
  • Linux系统安全加固实战:从内核到应用的全方位防护
  • ThinkPHP开发水族馆商品销售与经营管理系统实战
  • 2026年东营人防通风配套密闭盒生产厂家怎么选?这份优选指南请收好 - geo交流
  • 终结DLL地狱:Windows C++应用VC++运行库分发实战指南
  • 171、【Agent】【OpenCode】TuiThreadCmd(入口命令)
  • Python第三次作业解析:控制结构、函数与文件操作实战
  • 小奥录音更新:实时字幕500ms、说话人分离优化、导出pdf、加入安全认证等
  • ThinkPHP与Laravel双框架协同开发健康管理系统实践
  • 空洞骑士模组管理终极指南:Scarab让模组安装变得如此简单
  • MySQL视图、索引与事务核心原理与优化实战
  • 告别手动整理!OncePower批量重命名工具实战指南
  • ESLyric-LyricsSource:Foobar2000终极逐字歌词解决方案
  • Valhalla 静态工程审阅 #029|MiniMax H3 源码证据驱动评测【开源基础设施特辑】
  • AI在网络安全中的攻防博弈与平衡策略
  • 2026年金堂硬质合金回收电话甄选指南:从询价到成交的四个关键细节 - geo交流
  • 乌鲁木齐市天山区瓷砖空鼓维修上门服务推荐_2026天山北麓准噶尔盆地避坑全集与价格_客厅卫生间厨房阳台墙砖地砖 - 雨婺虹修缮
  • 智能体驱动测试:五种Agentic模式提升自动化测试效率
  • 如何实现微信小店多店防关联管理自动化?每个店铺独立宇宙,200+店铺互不感知
  • Blender到Unity FBX导出终极指南:解决坐标、缩放与动画问题
  • 飞书文档批量导出工具:25分钟完成700+文档的自动化备份方案