如果x,y在坐标框内

时间:2019-01-29 09:16:26

标签: python python-2.7 pygame

我一直在努力寻找有效的解决方案:

def hit(pos,box):
    if pos[0] > box[0]:
        if pos[0] < box[0]+box[2]:
            if pos[1] > box[1]:
                if pos[1] < box[1]+box[3]:
                    return True
    return False
pos = (50,132); box = (20,50,60,150)
hit(pos,box)

我正在使用pygame,想计算x,y坐标是否在x,y,x +,y +框内。像素完美不是问题。我试过将所有if检查放入一个大而又大的操作中,但它似乎具有相同的速度。

3 个答案:

答案 0 :(得分:3)

您的解决方案是有效的,但是您可以像这样使它更加优雅和简洁:

def hit(pos,box):
    return box[0]+box[2] > pos[0] > box[0] and box[1]+box[3] > pos[1] > box[1]

由于我们返回的是boolean值,因此我们可以将条件合并在一起。

答案 1 :(得分:0)

您可以使代码意图更清晰:

def isInside(pos,box):
    p_x, p_y = pos

    min_x = box[0]
    max_x = min_x + box[2]
    min_y = box[1]
    max_y = min_y + box[3]

    return min_x <= p_x <= max_x and min_y <= p_y <= max_y

这比严格需要的多了5(7)行-但是,如果您在凌晨2点醒来并获得此代码以解释其功能...,您可以查看。 >

单线是Filip Młynarski的答案。

答案 2 :(得分:0)

如果您使用的是pygame,则box应该是Rect,然后您可以使用collidepoint

pos = (50,132)
box = pygame.Rect((20,50,60,150))

hit = box.collidepoint(pos)