我一直在努力寻找有效的解决方案:
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检查放入一个大而又大的操作中,但它似乎具有相同的速度。
答案 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)