移除指定矩形区域内的精灵
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
,它利用child索引。
但如果这还不够快,我建议使用特殊的数据结构来快速搜索重叠,如区间树
相关文章:
- 将QGraphicsItem的移动区域限制在多边形区域内
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 两个连续的 OpenMP 并行区域会相互减慢速度
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 提升区域设置规范化带状字符,但不规范化重音
- 从精灵表在 sfml 中为精灵制作动画
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- 英特尔将指令存储在重叠的内存区域
- 如何给主窗口区域DKGRAY_BRUSH?
- 矢量擦除多个区域,2 x 擦除与单个分配?
- 错误:创建对象后无法分配区域
- 是否有任何区域设置会影响宽字符编码?
- GTKMM:拍摄绘图区域的屏幕截图?
- GTKMM:如何将键盘事件附加到绘图区域?
- 在 mmap'ed 区域上使用 memcpy 崩溃,for 循环不会
- AABB 碰撞使实际精灵的大小翻倍
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 移除指定矩形区域内的精灵