节点角色和类型

转发角色

在这里插入图片描述
在 Thread 网络中,节点分成两种转发角色:Router 和 End Device。

Router

Router 节点的行为如下:

  • 为网络设备转发数据包
  • 为尝试加入网络的设备提供安全的 commissioning 服务
  • 始终打开它的收发器

End Device

End Device 节点的行为如下:

  • 主要与单个 Router 进行通信
  • 不会为其他网络设备转发数据包
  • 可以关闭它的收发器来降低功耗

Key Point: Router 和 End Device 之间的关系称为父子关系。End Device 正确地依附到一个 Router 上,其中 Router 始终作为父节点,End Device 则始终是子节点。

设备类型

此外,节点有许多种类型。
在这里插入图片描述

Full Thread Device

一个 FTD(Full Thread Device)总是打开它的射频收发器,它订阅所有 Router 的多播地址,并维护 IPv6 地址映射。FTD 有三种类型:

  • Router
  • REED(Router Eligible End Device)— 可以升级为 Router
  • FED(Full End Device)— 无法升级为 Router

FTD 可以作为 Router(父)或 End Device(子)。

Minimal Thread Device

MTD(Minimal Thread Device)不会订阅 all-routers 多播地址,并且它会将它的所有消息发送给它的父节点。MTD 有两种类型:

  • MED(Minimal End Device)— 始终打开自身的收发器,无需从父节点中轮询消息
  • SED(Sleepy End Device)— 通常会关闭自身的收发器(睡眠),偶然会打开收发器(唤醒)以从父节点中轮询消息

MTD 只能作为 End Device(子)。

升级和降级

当待加入设备仅能与某个 REED 通信时, 则该 REED 可以升级成为 Router:

在这里插入图片描述

相反,当一个 Router 没有子节点时,它可以降级成 End Device:
在这里插入图片描述

其他角色和类型

Thread Leader

在这里插入图片描述

Thread Leader 是一个 Router,它负责管理 Thread 网络中的 Router。Thread Leader 是动态自选的(提高容错率),它负责汇总和分发全网络的配置信息。

Note: 每个 Thread 网络分区中总是只有一个 Leader。

Border Router

Border Router 是一种可以在 Thread 网络和其他网络(如 Wi-Fi)之间转发信息的设备。它还为外部连接配置 Thread 网络。

任何设备都可以充当 Border Router。

Note: 一个 Thread 网络中可以有多个 Border Router。

分区

在这里插入图片描述

一个 Thread 网络可能由多个分区组成。当一组 Thread 设备不能再与另一组 Thread 设备通信时,会发生这种情况。每个分区在逻辑上均作为独立的 Thread 网络来运行,它们具有各自的 Leader、Router ID 分配和网络数据,同时分区前相同的安全凭证都将被保留下来。

当分区之间可以连通时,它们会自动合并。

Key Point: 安全凭证(security credentials)定义了 Thread 网络。物理无线电的连通性定义了该 Thread 网络中的分区。

请注意,在本入门教程中一般将 Thread 网络假定成单个分区。在必要时,将使用“分区”一词来阐明关键概念和示例。本教程稍后将详细介绍分区。

设备限制

单个 Thread 网络所支持的设备类型数量是有限制的。

角色限制
Leader1
Router32
End Device511(每个 Router)

Thread 会尝试将 Router 的数量保持在 16 ~ 23 之间。如果一个 REED 作为 End Device 加入,并且网络中的 Router 数量低于 16,那么它将自动升级为 Router。

### Cocos Creator 中的角色节点选择方法 在 Cocos Creator 中,角色节点的选择可以通过多种方式进行实现。以下是几种常见的方法: #### 使用碰撞检测进行角色选择 一种常用的方法是利用物理系统的碰撞检测机制来判断鼠标点击或触摸位置是否命中某个角色节点。 ```javascript // MouseOrTouchHandler.js cc.Class({ extends: cc.Component, properties: { playerNodes: [cc.Node], // 需要监听的角色节点数组 }, onLoad() { this.node.on(cc.Node.EventType.TOUCH_START, this onTouchStart, this); }, onTouchStart(event) { const touchLocation = event.getLocation(); const worldPos = this.node.parent.convertToNodeSpaceAR(touchLocation); for (let i = 0; i < this.playerNodes.length; ++i) { let collider = this.playerNodes[i].getComponent(cc.BoxCollider); // 或者其他类型的 Collider 组件 if (collider && collider.containsPoint(worldPos)) { console.log(`Selected Player Node ${this.playerNodes[i].name}`); break; } } }, }); ``` 此代码片段展示了如何通过遍历 `playerNodes` 数组并调用每个节点上的碰撞器组件的 `containsPoint()` 函数来进行简单的点选测试[^1]。 #### 基于射线投射技术选取目标对象 另一种更精确的方式是在三维空间内采用射线投射算法,在二维游戏中也可以模拟这种逻辑。当玩家触控屏幕时发射一条从摄像机到手指坐标处的虚拟光线,并检查这条线上是否有任何物体被击中。 ```csharp // RaycastExample.cs (如果是C#) using UnityEngine; public class RaycastExample : MonoBehaviour { void Update () { if(Input.GetMouseButtonDown(0)){ RaycastHit hitInfo; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if(Physics.Raycast(ray,out hitInfo)){ Debug.Log($"Hit object name:{hitInfo.collider.name}"); } } } } ``` 注意这里给出的是 Unity 的例子用于说明概念;对于 Cocos Creator 来说,则可以借助其内置 API 完成相似的功能[^2]。 #### 利用UI交互系统处理选择操作 如果游戏中的角色是由 UI 元素表示的话,那么可以直接依靠 Cocos Creator 提供的强大 UI 系统完成选择任务。只需给相应的按钮或其他可响应输入事件的对象绑定回调函数即可轻松达成目的。 ```javascript // UIButtonHandler.js cc.Class({ extends: cc.Component, properties: { targetPlayerId: '', // 关联的目标角色 ID 字符串 }, onClicked() { console.log(`Button clicked! Selecting player with id=${this.targetPlayerId}`); // 进一步业务逻辑... }, }); ``` 上述三种方案分别适用于不同场景下的需求,开发者可以根据实际项目情况灵活选用最合适的解决方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值