0

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

类看起来像:

class CollidableObject
{
  public:

    CollidableObject();
    virtual ~CollidableObject();

    int Height;
    int Width;
    DirectX::SimpleMath::Vector2 position;
    bool collidable;
};

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

4

2 回答 2

0

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

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

}
于 2013-11-02T14:56:46.057 回答
0
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());
    //...
}
于 2013-11-02T14:53:32.547 回答