首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >皮博特-检测rect的哪一边与另一侧发生碰撞。

皮博特-检测rect的哪一边与另一侧发生碰撞。
EN

Stack Overflow用户
提问于 2019-01-31 09:03:36
回答 1查看 364关注 0票数 2

大家好,,我正在用Python和Pygame制作一个超级马里奥兄弟的克隆游戏,我写了一个函数,如果两个矩形碰撞,否则返回真。所以我知道如何检测马里奥和怪物相撞的时间。现在,我想知道马里奥是否跳过了怪物,或者换句话说,它是在怪物的正面发生碰撞的。我该怎么做?这是我的代码:

两个矩形碰撞检测功能:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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()

任何帮助都是非常感谢的。谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-31 09:44:38

解决这一问题的一种方法是计算“移动方向”,例如,您可以保存前面的步骤坐标,如果在当前步骤中,is_colliding返回真,而前面一步中的马里奥在怪物下面,而在前一步,is_colliding返回错误,而不是您可以决定马里奥是从上面来的。

代码语言:javascript
复制
# 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坐标是矩形的左下角,代码就能工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54456864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档