Cocos2d-x 移除指定矩形区域的精灵
Cocos2d-x Remove sprites in specified rectangular area
我正在使用 Cocos2d-x,我只是在寻找删除某个矩形区域下的精灵的有效方法。
例如,如果我在场景中有很多随机定位的精灵,如果它们属于矩形 (x1, y1),(x2, y2),我想将它们全部移除,那么我需要做什么?
我看到有两种方法可以从场景中移除精灵:
this->removeChildByTag(tag);
或
sprite->removeFromParent();
所以从这些方法来看,我们似乎需要以某种方式找到哪些精灵位于该区域内,然后删除它们。
但是最有效的方法是什么?
谢谢!
使用默认 cocos 功能执行此操作的唯一方法是遍历每个子节点以检测重叠并删除符合条件的节点。 removeFromParent()
以及 removeChildByTag()
将调用 parent->removeChild(this);
。并且 removeChild()
在子节点的 Vector
中使用 std::find
。复杂度为 O(n)。因此,优化的第一步是使用 detachChild
来利用子索引。
但如果这还不够快,我会建议使用特殊的数据结构来快速搜索像区间树一样的重叠。
我正在使用 Cocos2d-x,我只是在寻找删除某个矩形区域下的精灵的有效方法。
例如,如果我在场景中有很多随机定位的精灵,如果它们属于矩形 (x1, y1),(x2, y2),我想将它们全部移除,那么我需要做什么?
我看到有两种方法可以从场景中移除精灵:
this->removeChildByTag(tag);
或
sprite->removeFromParent();
所以从这些方法来看,我们似乎需要以某种方式找到哪些精灵位于该区域内,然后删除它们。
但是最有效的方法是什么?
谢谢!
使用默认 cocos 功能执行此操作的唯一方法是遍历每个子节点以检测重叠并删除符合条件的节点。 removeFromParent()
以及 removeChildByTag()
将调用 parent->removeChild(this);
。并且 removeChild()
在子节点的 Vector
中使用 std::find
。复杂度为 O(n)。因此,优化的第一步是使用 detachChild
来利用子索引。
但如果这还不够快,我会建议使用特殊的数据结构来快速搜索像区间树一样的重叠。