我正在制作一个简单的2d平台游戏,我需要找到所有创建的对象的所有值,这些对象将代表游戏中的可碰撞物。所以我需要所有的x / y坐标,宽度和高度,以便我可以检查它们是否与播放器发生碰撞。
班级看起来像:
class CollidableObject
{
public:
CollidableObject();
virtual ~CollidableObject();
int Height;
int Width;
DirectX::SimpleMath::Vector2 position;
bool collidable;
};
这显然是一个非常简单的类,我只需要一种方法来确定玩家位置是否与任何可碰撞对象值发生碰撞,我不需要碰撞代码只是获取所有可碰撞对象值的方法立刻。希望我已经说清楚了。
答案 0 :(得分: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());
//...
}
答案 1 :(得分: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
}