在一个向量中找到坐标
Find coordinates in a vector c++
我正在用c++在Qt中创造一款游戏,我将每个特定大小的坐标存储在一个向量中,如:
std::vector<std::unique_ptr<Tile>> all_tiles = createWorld(bgTile);
for(auto & tile : all_tiles) {
tiles.push_back(std::move(tile));
}
每个关卡也有一些生命值包,它们也存储在一个向量中。
std::vector<std::unique_ptr<Enemy>> all_enemies = getEnemies(nrOfEnemies);
for(auto &healthPackUniquePtr : all_healthpacks) {
std::shared_ptr<Tile> healthPackPtr{std::move(healthPackUniquePtr)};
int x = healthPackPtr->getXPos();
int y = healthPackPtr->getYPos();
int newYpos=checkOverlapPos(healthPackPtr->getXPos(),healthPackPtr->getYPos());
newYpos = checkOverlapEnemy(healthPackPtr->getXPos(),newYpos);
auto healthPack = std::make_shared<HealthPack>(healthPackPtr->getXPos(), newYpos, healthPackPtr->getValue());
healthPacks.push_back(healthPack);
}
但我知道我正在寻找最快的方法来检查我的球员位置是否在一个生命包位置。我需要搜索向量中的两个值x和y的位置。有人有什么建议吗?
你的"真正"问题:
我必须搜索向量中的两个值:x和y位置。任何一个建议怎么做?"
是一个经典的XY问题,所以我忽略它!
我正在寻找最快的方法来检查我的球员位置是否在健康包位置。
现在我们来谈谈。随着物品数量的增加,您现在使用的方法将无法很好地扩展,您需要为您感兴趣的每一对物品做类似的事情。不好。
值得庆幸的是,这个问题已经解决(并改进)了几十年,您需要使用一个特殊的分区方案,如BSP、BVH、四叉树/八叉树等。这些方案的美妙之处在于,一个单一的数据结构可以容纳整个世界,使任意项相交查询变得微不足道(而且快速)。
你可以实现一个回调系统。然后玩家移动一个贴图,触发一个回调到玩家所在的贴图。贴图应该知道它的状态,可以为玩家增加生命值,或者如果贴图上没有任何内容就什么都不做。使用这种技术,您根本不需要搜索。
如果all_leathpacks
的元素少于50个,我就不会费心去改进了。简单的循环就足够快了。否则,你可以将矢量分割成扇区,只检查与玩家相同扇区中的元素(如果靠近边缘,可能会检查周围的几个元素)。
如果你需要一些更适合内存的东西,你可以使用KD-tree来索引健康包并快速搜索它们(O(logN)时间)。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- 对坐标结构的向量进行排序
- 我可以搜索字符向量的向量以找到特定的字符并获得其坐标
- 对坐标 c++ 的向量进行排序
- 随机坐标中的 cout 向量 n 次
- 从坐标向量中提取坐标并保存到文件
- 坐标的排序向量C++
- C++对指针向量进行排序,其中对象表示矩阵坐标
- 2d(3d)坐标的哈希映射(即双精度向量)
- findnonzero() 中存储向量<Point>中非零元素的坐标时出错
- 在字符串向量中查找char的坐标(c++)
- 在一个向量中找到坐标