c++ 查找类中所有对象的所有值

c++ Find all values of all objects in a class

本文关键字:对象 查找 c++      更新时间:2023-10-16

我正在制作一个简单的 2D 平台游戏,我需要找到所有创建对象的所有值,这些对象将代表游戏中的可碰撞对象。所以我需要所有的 x/y 坐标、宽度和高度,以便我可以检查它们中是否有任何与玩家碰撞。

类看起来像:

class CollidableObject
{
  public:
    CollidableObject();
    virtual ~CollidableObject();
    int Height;
    int Width;
    DirectX::SimpleMath::Vector2 position;
    bool collidable;
};

这显然是一个非常简单的类,我只需要一种方法来确定玩家位置是否与任何可碰撞对象值发生冲突,我不需要碰撞代码,只需要一种一次获取所有可碰撞对象值的方法。希望我已经说清楚了。

class CollisionPred(
public:
    CollisionPred( Player p) : p_(p) {}
    bool operator()(const ColiidableObject& o) {
         // process object and return true if there is a collision, i.e:
         return o.Height*o.Height + o.Width*o.Width > p_.distance;
    }
    private:
         Player p_;
;
int main() {
    //...
    std::vector<CollidableObject> v(100);
    std::vector<CollidableObject>::iterator it = 
                             std::find_if(v.begin(), v.end(), CollisionPred());
    //...
}

最简单但最流行的方法是遍历一组可碰撞项,以检查是否有任何可碰撞对象与玩家发生冲突。

vector<CollidableObject> objects;
for(CollidableObject& obj: objects)
{
    if (obj.position.x - obj.width < player.position.x + player.radius
     && obj.position.x + obj.width > player.position.x - player.radius
     && obj.position.y - obj.height < player.position.y + player.radius
     && obj.position.y + obj.height > player.position.y - player.radius
    )
    // collision happened
}