这段代码到底做了什么来检查碰撞?

  • 本文关键字:碰撞 段代码 代码 c++
  • 更新时间 :
  • 英文 :


这段代码到底是怎么检查碰撞的

void Map::entities_collide(Pacman* pacman) {
list <Entity*> temp = entities;
for (Entity* entity : temp) {
if ((pacman->get_position()->GetX() == entity->get_position()->GetX()) && abs(pacman->get_position()->GetY() - entity->get_position()->GetY()) <= 2 ||
(pacman->get_position()->GetY() == entity->get_position()->GetY()) && abs(pacman->get_position()->GetX() - entity->get_position()->GetX()) <= 2) {
pacman->eat(*entity);
entities.remove(entity);
}
}
}
• • • • • • •
• • • E • • •
• • • E • • •
• E E P E E •
• • • E • • •
• • • E • • •
• • • • • • •

pacman是p,表达式测试该实体是否位于p或e中。如果是,pacman吃掉该实体。

当两个条件之一发生时,您的pacman吃掉实体(因此在两个类似的子句之间有||):

  • 如果pacmanentity之间的X匹配,则为检查Y之间的差异是否在pacman's内咬的范围,显然是2个正方形。
  • 如果在pacmanentity之间的Y是匹配的,那么它检查X之间的差异是否在pacman's内咬的范围,显然是2个正方形。

这保留了pacman只吃pacman上方、下方、左侧或右侧的能力,但奇怪的是,它允许pacman从它的位置上吃0、1或2个方块。

abs(pacman->get_position()->GetY() - entity->get_position()->GetY()) <= 2

找到沿Y轴的差值。如果差值的绝对值小于等于2,则pacman按位。假设绝对值为2或更小,那么实际可能的值将是-2、-1、0、1或2。

最新更新