pygame中的碰撞不起作用(对象碰撞但代码未触发)

时间:2019-07-01 13:11:04

标签: python python-3.x pygame

我正在为一个学校项目制作一个Pygame程序。玩家角色将穿过敌人的精灵,而不会触发碰撞。我该如何解决?

如果两个Sprite之间有任何重叠,应运行

CODE。

if CharY > thing_starty and CharY < thing_starty + Enemy2_height or CharY+PCHeight > thing_starty and CharY + PCHeight < thing_starty + Enemy2_height:
    if CharX > thing_startx and CharX < thing_startx + Enemy2_width or CharX + PCWidth > thing_startx and CharX + PCWidth < thing_startx + Enemy2_width:
        CODE

1 个答案:

答案 0 :(得分:1)

我建议使用pygame.Rect对象和.colliderect()检查两个矩形的冲突:

# detects collisions
charRect  = pg.Rect(CharX, CharX, PCWidth, PCHeight)
enemyRect = pg.Rect(thing_startx, thing_starty, Enemy2_width, Enemy2_height)
if charRect.colliderect(enemyRect):
    # [...]
    # CODE

如果您想自己进行碰撞检测,则必须检查矩形在两个维度上是否重叠。

如果满足以下条件,则范围[x1x1+w1]与范围[x2x2+w2]重叠:

intersect = x1 < x2+w2 and x2 < x1+w1

请注意,w1w2必须大于0。

对两个维度都这样做:

if CharX < thing_startx + Enemy2_width  and thing_startx < CharX + PCWidht and \
   CharY < thing_starty + Enemy2_height and thing_starty < CharY + PCHeight
    # [...]
    # CODE