所以我一直在做一个游戏,到目前为止最大的问题是我们不能让玩家与场地上的任何物体相撞。取而代之的是它们直接穿过树。有人能告诉我为什么吗?下面是我尝试使用的碰撞检测代码:
for tree in treelist:
if self.player.rect.x == tree.rect.x:
self.player.rect.x == self.player.rect.x - 2
if self.player.rect.x == tree.rect.x + tree.rect.width:
self.player.rect.x == self.player.rect.x + 2
if self.player.rect.y == tree.rect.y:
self.player.rect.y == self.player.rect.y - 2
if self.player.rect.y == tree.rect.y + tree.rect.height:
self.player.rect.y == self.player.rect.y + 2
这是理论上的声音,还是我做错了?
发布于 2014-12-10 10:21:54
近乎合理的理论。您只需检查player
矩形位置是否与tree
矩形位置的边界完全相同。这种情况很少发生。你也需要检查玩家是否在树的边界之间,更像这样:
# check if player is overlapping the tree
if tree.rect.x <= self.player.rect.x <= tree.rect.x + tree.rect.width:
# decide on how to move player away from the tree depending on previous frame
# if player is moving forward, send them backwards from tree
if self.player.rect.prev_x < self.player.rect.x:
self.player.rect.x -= 2
# otherwise send them forwards from tree
else:
self.player.rect.x += 2
重叠检查的确切逻辑和重叠时的反应完全取决于您,但这种事情应该可以工作。请注意,你需要跟踪玩家在前一帧中的位置,否则你将不知道他们从哪个方向击中树。您可以这样做:
self.player.rect.prev_x = self.player.rect.x
self.player.rect.x += player_velocity
https://stackoverflow.com/questions/27392237
复制相似问题