3.Godot节点编辑操作及类的继承关系

1. 节点的父子关系
  • 在层级树中,对象 (节点) 呈树形显示,一个节点下面,也可以下挂子节点
    ![[Pasted image 20240413203112.png]]
1 添加两个对象
2 拖拽一个对象到另一个对象,成为子对象 (子节点)
3 移动父对象、旋转父对象,观察

可以发现,当父对象移动时,子对象随之移动
  • 理解相对坐标
子对象的坐标轴,是相对于父对象的
1 移动父对象时,子对象的 Position 不发生变化
2 旋转父对象时,子对象的 Rotation 不发生变化
2. 节点的显示和隐藏
  • 删除游戏对象
    ![[Pasted image 20240413203424.png]]
右键 Delete ,或者键盘 Delete 均可
Delete父节点的时候,子节点也会一并删除
  • 恢复
CTRL + Z ,撤销上一步操作
  • 更改节点对象名字
    ![[Pasted image 20240413203440.png]]
右键 Rename,或者双击节点修改
  • 显示 / 隐藏
    ![[Pasted image 20240413203500.png]]
    ![[Pasted image 20240413203628.png]]
在 Inspector 里,勾选 Visible 复选框,或者在节点右侧点击Toggle Visibility
  • 设置长宽比
    ![[Pasted image 20240413203728.png]]
在 Project | Project Settings | Display | Window 中可以设置长宽比
3. 游戏节点的显示顺序
  • 在2D画面中,两个对象如果重叠,谁显示在上面呢?
  • 按照节点的顺序
  • 在数据结构上的专业术语叫树的广度优先遍历,广度优先遍历的顺序就是最后显示的顺序
  • 显示顺序就是渲染顺序,最后一次渲染的,肯定是在最上层的
    ![[Pasted image 20240413203906.png]]

![[Pasted image 20240413203940.png]]

4. pivot,轴心点
  • 轴心点也叫中心点,中心点是一个物体的中心,当我们对物体进行操作的时候,都是以中心点为中心进行对物体的操作
  • 轴心点可以理解为把物体抽象成一个点,物体的位置就是指其轴心点的位置,就是该物体坐标系的原点
  • 主要用于旋转和决定对象的位置
  • 轴心 Pivot ,指旋转轴、坐标基准点,默认在对象的几何中心
  • 轴心的作用:
    • 旋转轴,当旋转对象时,是以 Pivot 为轴心来去旋转对象的
    • 坐标系的原点,当移动对象时,是以 Pivot 为中心来计算位置Position的
5. anchor,锚点
  • 是一个点,锚点描述的是一个对象的Margin,相对于锚点的坐标
  • 锚点的left,top,right,bottom是相对于父节点的值
  • 主要是用于描述子节点相对于父节点的位置
    • 必须有父位置,才有锚点存在的意义
  • 当对一个节点的子节点进行设置锚点时,子节点的锚点范围只能够是父节点的控件区域内。
  • 注意任何布局也都是相对于父窗口矩形的
  • 主要用于在GUI中描述子节点相对于父节点的位置
    ![[Pasted image 20240413205357.png]]
Godot中类的继承关系

Godot当中所有的类,都有一个顶层节点:Object
重要的有两个子类

  1. Node节点:可以挂载到场景中,包括其子类
    1. Node3D
    2. CanvasItem
      1. Node2D:2D节点
        1. 碰撞节点
        2. 精灵节点
      2. Control:GUI界面
        1. 按钮
        2. 文本框
        3. 进度条
  2. RefCounted:非节点的一些功能类
    1. 寻路
    2. 资源加载
<think>好的,我现在需要帮助用户解决在Godot引擎中如何实例化子节点并绑定点击事件的问题。首先,我得回顾一下用户提供的引用内容,看看有没有相关的信息可以借鉴。 引用[2]提到,实例化子节点是通过链接按钮选择子场景文件,然后添加到父场景中。引用[3]则强调了场景实例化的设计优势,以及如何通过节点树组织场景。用户的问题结合了实例化和事件绑定,所以需要将这两部分结合起来。 首先,实例化子节点的步骤大致是创建子场景,然后在父场景中实例化它。比如,用户可能有一个按钮场景,需要作为子节点添加到主场景中。接下来是绑定点击事件,这通常涉及到信号(signals)的使用,Godot中的观察者模式就是通过信号实现的,这在引用[1]和[3]中都有提到。 具体步骤可能包括:在子场景的节点(比如Button节点)中定义信号,然后在父场景中实例化该子节点,并连接信号到父脚本中的方法。需要确保子节点的脚本正确发出信号,而父节点正确连接并处理这些信号。 另外,用户可能需要了解如何通过代码动态实例化子节点,而不仅仅是使用编辑器。这涉及到使用PackedScene和instance()方法,然后在运行时添加子节点,并连接信号。 需要注意的潜在问题包括信号连接是否正确,节点路径是否正确,以及是否在正确的时机实例化和添加节点。比如,在_ready()函数中实例化,并确保父节点已存在于场景树中。 可能还需要考虑如何传递参数或数据到子节点,或者在点击事件中处理特定的逻辑。例如,点击按钮后触发某个游戏动作,可能需要访问父节点的函数或变量。 总结步骤应该是:创建子场景并添加信号,实例化子节点到父场景,连接信号到父脚本的方法,测试点击事件是否触发。同时,提供代码示例和注意事项会更清晰。</think>在Godot引擎中实现实例化子节点并绑定点击事件可分为以下步骤: ### 一、场景实例化与节点添加 1. **创建子场景** 创建包含$Button$或$Area2D$等交互节点的独立场景(如$ClickableItem.tscn$),建议层级结构: ``` ClickableItem (Node2D) └── Button (或Area2D + CollisionShape2D) ``` 2. **主场景实例化** 通过代码动态实例化: ```gdscript var clickable_scene = preload("res://ClickableItem.tscn") func _ready(): var instance = clickable_scene.instantiate() add_child(instance) instance.position = Vector2(100, 100) ``` 或通过编辑器拖拽场景文件到父节点完成实例化[^2] ### 二、点击事件绑定实现 #### 方法1:通过Button节点内置信号 ```gdscript # 在子场景脚本中声明信号 signal item_clicked func _on_button_pressed(): emit_signal("item_clicked") ``` 父场景连接信号: ```gdscript instance.item_clicked.connect(_on_item_clicked) func _on_item_clicked(): print("子节点被点击") ``` #### 方法2:使用Area2D检测点击 ```gdscript # 子场景脚本 extends Area2D signal area_clicked func _on_input_event(_viewport, event, _shape_idx): if event is InputEventMouseButton and event.pressed: emit_signal("area_clicked") ``` 父场景绑定方式与Button相同 ### 三、动态参数传递示例 ```gdscript # 父场景传递自定义数据 instance.set_meta("item_id", 123) # 子场景读取数据 func get_item_data(): return get_meta("item_id") ``` ### 注意事项 1. 确保交互节点的$mouse_filter$属性设置为$MOUSE_FILTER_STOP$ 2. 使用$Area2D$时需要添加$CollisionShape2D$碰撞体 3. 信号连接建议在`_ready()`或`_enter_tree()`生命周期完成 4. 复杂场景建议采用场景继承机制优化代码结构[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值