Pygame检测矩形的哪一侧与另一侧碰撞

2024-04-25 08:48:11 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好! 我正在用Python和Pygame制作一个超级马里奥兄弟的克隆游戏,我编写了一个函数,如果两个矩形发生碰撞,则返回True,否则返回False。所以我知道当马里奥和怪物相撞时怎么探测。现在,我想知道马里奥是不是跳到怪物身上了,或者换句话说,是矩形撞到了怪物的顶部。我该怎么做?这是我的密码:

两个矩形碰撞检测功能:

def is_colliding(x, y, w, h, x2, y2, w2, h2):
    if x < x2 + w2 and x + w > x2 and y < y2 + h2 and h + y > y2:
        return True
    return False

在主游戏循环中的实际检查:

while True:
    # other stuff
    if is_colliding(mario.x, mario.y, mario.w, mario.h, goomba1.x, goomba1.y, goomba1.w, goomba1.h):
        goomba1.wounded()

感谢您的帮助。谢谢。


Tags: andfalsetrue游戏ifish2x2
1条回答
网友
1楼 · 发布于 2024-04-25 08:48:11

解决问题的方法之一是计算“运动方向” 例如,您可以保存上一步坐标,如果在当前步骤中是\u碰撞返回True,并且上一步中的马里奥在怪物下,而在上一步中是\u碰撞返回False,那么您就可以确定马里奥是从上面掉下来的。你知道吗

# x1,y1,h1,w1 - mario params
# x2,y2,h2,w2 - monster params
# y1_prev - mario previous param
# y2_prev - monster prevoius param
# collide_prev - previous sollision check

def check_above(x1, y1, w1, h1, x2, y2, w2, h2, y1_prev, y2_prev, collide_prev):
    collide = is_colliding(x1, y1, w1, h1, x2, y2, w2, h2)
    if collide and y2_prev + h2 < y1_prev and not collide_prev:
        return True
    else:
        return False 

逻辑很简单,如果在当前步骤中马里奥正在碰撞,而在前一步中两者都没有碰撞,并且马里奥在怪物上方,那么就意味着马里奥从上方碰撞。你知道吗

注意 如果x坐标是矩形的左下角,则代码将起作用

相关问题 更多 >

    热门问题