【问题标题】:c++ Find all values of all objects in a classc++ 查找类中所有对象的所有值
【发布时间】:2013-11-02 14:35:26
【问题描述】:

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

类看起来像:

class CollidableObject
{
  public:

    CollidableObject();
    virtual ~CollidableObject();

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

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

【问题讨论】:

  • 制作一个 vectorlist 持有这些对象。遍历它并检查每个元素是否与玩家发生碰撞。

标签: c++ class oop object


【解决方案1】:
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());
    //...
}

【讨论】:

    【解决方案2】:

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

    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
    
    }
    

    【讨论】:

    • change auto obj: CollidableObject for auto obj: objects,你也不会通过这种方式得到一个特定的对象,find_if 返回一个对象的迭代器
    • 谢谢 :) 但是在调试时我没有看到向量中的任何对象,我只是在创建这样的新对象: CollidableObject CollidableBox
    • 所以你的游戏中只有一个可碰撞对象实例?
    • @tomi.lee.jones 可能有我想要的数量,但目前我只是测试两个,如果我理解正确的话。抱歉,我对 oop 很陌生
    • 我明白,但我相信在很短的时间内您会得到不止两个,然后您需要将它们放入某个容器中。但不管有多少,逻辑都是一样的:如果有一个对象,只需删除循环。 if 声明仍然存在。为什么它不回答你的情况?你真正想做的是什么?您想同时获取所有对象的值吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2022-11-18
    相关资源
    最近更新 更多