【发布时间】:2011-10-21 20:06:21
【问题描述】:
每当我尝试在运行 enterframe 的情况下删除对象/子对象时,我总是会收到空引用错误。 在我的特殊情况下,设置是战场包含很多机器人:
- 子(机器人)dispatchEvent 被销毁
- 父容器接收到事件并开始通过 removeChild 移除子容器,并将子容器从机器人数组中移除。
- 在 enterframe 上,在循环移动机器人的过程中,有时我会得到空引用,所以我必须调用 if (robots[i] == null) continue;
如果机器人在我的整个框架上都是空的,你如何安全地移除孩子而不洒水?
我的一个想法是在 enterframe 中列出要删除的机器人,检查是否有要删除的机器人,如果有,则在此处进行删除,而不是在机器人爆炸事件上进行回调。
【问题讨论】:
-
你能发布代码吗?你如何遍历你的机器人收藏?你是保留一个数组还是循环显示列表中的子项?
-
您如何遍历您的机器人集合?它只是一个机器人数组你是保留一个数组还是循环显示列表中的孩子?我保留数组是因为在 Battlefield 容器中还有其他不是 Robot 的元素。我稍后会发布代码,我可能应该提到这是在 Haxe 中但是,我在其他基于 Flash 的框架中遇到这个问题,例如 Corona SDK(使用 lua)
-
您创建名为 Robots 的机器人管理器类来管理所有机器人类实例。保持模块化并以良好的 OOP 方式封装。
-
@The_asMan 并不能解决每当有事件被派发时仍然会遇到空引用的问题
-
如果管理器处理所有机器人实例,则不会。到那时,它变得微不足道。 enterFrame 循环永远不需要知道机器人是否为空,它只需要调用管理器类中的函数
标签: flash actionscript-3 actionscript haxe