【Godot】对 Godot 节点设计的思考
对 Godot 中节点设计的思考
单个节点的功能设计的想法,体会 Godot 的设计思想
低耦合
设计单个节点可复用的节点时,调用方法尽量只对当前节点可获取到的变量或方法进行使用,比如我写一个可以控制 KinematicBody2D 节点的“控制器节点”,这时我们需要设计一个获取要控制对应节点的方法,以 get_host()
作为获取要控制的节点的方法举例。
比如我想获取当前场景的根节点作为控制的对象:
## 返回操控的宿主
func get_host() -> KinematicBody2D:return get_owner() as KinematicBody2D
或者是以 NodePath
作为获取要控制的节点:
export var host = @""
func get_host() -> KinematicBody2D:return get_node(host) as KinematicBody2D
也可以通过变量进行获取,我以前喜欢这样写,但是现在不喜欢这样,因为有时候我可能计划有变,需要在获取 host 时对 host 作出一些判断或修改,这样写又该重新再写个方法。
onready var host = get_owner() as KinematicBody2D
不要直接通过指定固定的值来获取外部的节点的方式!
func get_host() -> KinematicBody2D:return get_node("../Player") as KinematicBody2D # 不要这样写
因为这样写在后来修改节点结构时,或者用在其他名字不为 Player
的节点下时,需要进行频繁的修改,这样做会非常容易出现 bug。
如果想要对节点进行"不属于当前节点功能的操作"时,需要发射信号进行处理
比如在节点向前冲刺时想要将碰撞到的节点进行“眩晕操作”,那么将其分开处理,一个冲刺节点,一个眩晕节点。
将冲刺时碰撞到的节点发出信号
signal collision_to_unit(collider_list) # 碰撞到单位
然后连接到眩晕节点的对一组节点“进行眩晕”的操作的方法。
func vertigo(collider_list: Array):for node in collider_list:# 下面写对接点的眩晕操作pass
如果这时想扩展冲刺方法,想在升级时再造成伤害,那么就可以创建一个伤害节点,或者直接连接到主场景,在里边写如何造成伤害的方法
# 连接sprint(冲刺)节点的 collision_to_unit 信号
func _on_Sprint_collision_to_unit(collider_list):for node in collider_list:# 下面写对节点造成伤害操作pass
这样写完,你的 冲刺节点 可以重新拿来在其他新的游戏中再次被重新利用,不需再重新写代码,节约时间。降低耦合度。
看一个示例:
下面的 技能1 是一个复合型的技能,它包含 冲刺、眩晕、伤害 的能力,如下
这样一看一目了然。
调用 技能1 的方法时,比如 cast_skill
进行调用技能,会在 cast_skill
下调用 冲刺 节点的调用技能的方法。然后连接冲刺节点的 collision_to_unit
信号到 技能1
的场景中,对碰撞到的单位进行一个循环遍历,然后调用 眩晕 伤害 节点的技能,逐个造成伤害和眩晕。提高了 技能1 节点的可扩展性,也降低了耦合,节点结构也清晰。
高内聚
一个节点的功能会根据不同的节点的变化而变化,比如 CollisionObject2D
类型的节点
下面可以添加 规则碰撞图形 和 不规则碰撞图形
CollisionObject2D
类型的节点,只对碰撞的结果进行处理,而碰撞形状不属于 碰撞的对象,而将功能分离,单独做成碰撞形状节点,和 CollisionObject2D
类型的节点一起使用。
如果一个功能是在需要时才用到的,那么将它设计成 Resource
属性或者独立的方法,比如 RigidBody2D
中的 Physics Material
属性。
如 CollisionShape2D
的 shape
属性
【Godot】对 Godot 节点设计的思考相关推荐
- 服务拆分的设计和思考(B2B 技术共享第九篇)
本文主要想给大家分享一下,宋小菜这三年来,是如何从单点巨石系统演变成领域驱动的服务化设计的.这个演变现在还在继续,我们在实践过程中遇到了很多坑,也收获了经验和思考. 一.早期的系统 1.1 唯快不破 ...
- SAP MM 关于采购组设计的思考
SAP MM 关于采购组设计的思考 在项目实践中,SAP MM中的采购组的设计有如下2种常见的方式: 1)采购组与采购员对应起来.一个采购组可以对应一个采购员,也可以对应一组采购员.笔者参与的好几个项 ...
- HDLBits答案(6)_硬件模块设计的思考方式
硬件模块设计的思考方式 HDLBits链接 基本的逻辑门操作 题目描述1:将输入端口in和输出端口out连接. Solution1: module top_module (input in,outpu ...
- 【案例讨论】从案例引发的对缓存设计的思考,干货讨论,绝对不玩虚的
主题:从案例引发的对缓存设计的思考 背景: 谈到性能优化,势必要谈到缓存架构的设计与使用.几乎是所有人都知道缓存的威力,但是知道终归只是知道,如何真正合理的在自己的项目中进行使用,又是另外一回事了.我 ...
- 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝
生鲜配送ERP系统_对商品模块数据模型与界面设计的思考及简要分析[Java 开源版]杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝 一直在研究与改造自己的生鲜配送系统,越来越觉得后 ...
- 手机游戏的分析,设计,思考
问题导向 本文是对于手机游戏产品的分析,设计,思考 如果你都有了答案,可以忽略本文章,或去产品学习地图寻找更多答案 前言 本文将分享作者对于游戏的一些理解与分析,主要分为几个方面,并且简单分析< ...
- 计算机导论第五讲MOOC模拟答案,MOOC理念指导下的计算机导论课程_微课堂_设计与思考_朱淑鑫...
MOOC理念指导下的计算机导论课程 "微课堂"设计与思考 朱淑鑫,徐焕良,任守纲,李晓晖 (南京农业大学 信息科学与技术学院,江苏 南京210095) 摘要:在MOOC理念的指导下 ...
- 关于小梅哥ADC128S022驱动设计的思考
此篇文章,主要讲述经过视频点拨后自己动手写adc_driver.v代码所遇到的若干问题. 文章目录 1. 开篇,各模块连接关系 2. ADC时序分析 2.1 DIN的变化 2.2 rdata的变化 2 ...
- 网站设计的思考 (转)
1.定位你的网站主题和名称 2.定位你的网站CI形象 3.确定网站的栏目和版块 4.确定网站的目录结构和链接结构 5.确定网站的整体风格和创意设计 6.首页的设计 7.版面布局的原理 8.网页色彩搭配 ...
- 网站设计的思考(藏)
1.定位你的网站主题和名称 2.定位你的网站CI形象 3.确定网站的栏目和版块 4.确定网站的目录结构和链接结构 5.确定网站的整体风格和创意设计 6.首页的设计 7.版面布局的原理 8.网页色彩搭配 ...
最新文章
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- python自学_为什么要选择Python怎样系统的自学并快速学习Python
- 团队项目第二阶段冲刺站立会议04
- Java实现敏感词过滤 - IKAnalyzer中文分词工具
- ORACLE初始化参数文件详细文档
- mysql-nt.exe w3wp.exe cpu 100%_w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法
- hashmap 从头到尾_如何从头到尾设计一个简单的复古徽标
- 各国网络安全审查制度及案例分析
- 上架服务器必须做的准备工作
- hibernate 并发获取session失败 空指针_高并发之|通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程...
- 15款最佳的 jQuery 分步引导插件
- 遥感基础编程语言IDL介绍
- 大连理工计算机博士,【看完窒息】大连理工大学博士遗书
- python 视频字幕合并_怎么把字幕和视频合并(教你两者合并方法)
- Vi编辑异常退出解决
- 【论文解读】Exploring Complementary Strengths of Invariant and Equivariant Representations(小样本等变和不变的互补)
- 软件项目管理实践经验谈
- LTDC-DMA2D显示屏显示-编码标准(三)
- 5、中小企业网络架构-核心层交换机基本配置
- 软件project师周兆熊给IT学子的倾情奉献
热门文章
- 怎么让自媒体文章原创度变高?原创度达到多少才算合格?
- v-for中为何要使用key
- 什么是技术交底书? 如何撰写技术交底书
- 苹果应用ipa安装包下载
- Google Chrome 49.0.2623.112 XP系统最终版离线安装包官方下载地址
- 程序员修炼之道(通俗版)——第八章
- 阿里矢量图库icomoon的icon引用方法
- 迅雷SVIP版(资源下载神器)官方中文版V11.1.2.1078 | 迅雷不限速版下载
- Java拦截器和过滤器
- ifix与mysql_基于ODBC技术实现iFix组态软件与关系数据库通讯接口