动态添加元素
动态添加元素与预先添加元素略有不同。
在你执行
TerminalManager.spawn(terminal);
1
之后,会去执行 init 方法生成 Terminal 与 Element 的虚拟实体,
今后再执行 terminal.addElement 也不会生成虚拟实体了,所以需要你去手动生成实体。如下所示:
// 动态添加元素示例
Element element = new ...; //新建一个 Element
terminal.addElement(element, e -> { // 将其添加到 Element 里面
// 可以进行额外配置
});
element.init(); // 初始化 Element 并创建虚拟实体
1
2
3
4
5
6
2
3
4
5
6
或者这样
new .../*新建一个 Element*/ {{
// 进行额外配置
// ......
terminal.addElement(this); // 将其添加到 Element 里面
this.init(); // 初始化 Element 并创建虚拟实体
}};
1
2
3
4
5
6
2
3
4
5
6
需要注意的是,必须要严格按照顺序执行,terminal.addElement 不仅仅是将 Element 添加到 Terminal,还会将 Terminal 绑定到 Element。
为什么需要先绑定 Terminal 再创建虚拟实体?
VectorDisplays 需要获取 Terminal 的位置和旋转变换,基于 Terminal 的参考系,计算 Element 的实体在世界上的位置。
如果没有绑定 Terminal,那么 Element 将无法取得参考系计算它在世界上的位置。
下面是一个错误案例
// 错误案例,请勿模仿
// 错误案例,请勿模仿
// 错误案例,请勿模仿
terminal.addElement(new .../*新建一个 Element*/, e -> {
// ...进行一系列配置
e.init(); // 不要在这里执行 init,此时还没有将 Terminal 绑定到 Element。
});
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
如果需要动态删除元素,则使用 terminal.removeElement 即可,不需要手动执行 element.dispose();。
上次更新: 2025/12/08, 04:32:33