2017-09-26 40 views
0

我正在用Python和PyGame进行游戏,并且我想实现一个视线系统,敌人可以在你的长度或宽度内检测到你(它们是Rects)。什么是检查这个最有效的方法?这是我有什么,如果是任何帮助......Python/PyGame如何检查矩形是否在所有四个方向上直接位于另一矩形的上方或旁边?

class FOV: 
def view_left_top(ax,ay,bx,by,bh): 
    return ax < bx and ay < (by + bh) and ay > by 

def view_left_bottom(ax,ay,ah,bx,by,bh): 
    return ax < bx and ay < (by + bh) and (ay + ah) > by 

def view_right_top(ax,ay,aw,bx,by,bw,bh): 
    return ax + aw > bx + bw and ay < (by + bh) and ay > by 

def view_right_bottom(ax,ay,aw,ah,bx,by,bw,bh): 
    return ax + aw > bx + bw and ay < (by + bh) and (ay + ah) > by 

def view_top_x(ax,ay,bx,by,bw): 
    return ay < by and ax > bx and ax < (bx + bw) 

def view_top_y(ax,ay,aw,bx,by,bw): 
    return ay < by and (ax + aw) > bx and ax < (bx + bw) 

def view_bottom_x(ax,ay,bx,by,bw): 
    return ay > by and ax > bx and ax < (bx + bw) 

def view_bottom_y(ax,ay,aw,bx,by,bw): 
    return ay > by and (ax + aw) > bx and ax < (bx + bw) 

回答

0

可以使用pygame.Rect.colliderect(矩形)方法来测试,如果两个矩形重叠。

import pygame 

class Player: 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
     self.rect = pygame.Rect(x, y, 32, 32) #x, y, width, height 
    def update(self, screen, entities): 
     pygame.draw.rect(screen, (255, 0, 0), self.rect) #Draws red square 

     for e in entities: 
      if self.rect.colliderect(e.rect): 
       is_colliding = True 
       break 
      else: 
       is_colliding = False 
+0

感谢您的答复,但我有碰撞检测处理但我正在寻找的是Rect是否通过了另一个Rect的前面。虽然你给我的碰撞检测比我所支持的更有效率。 –

0

我最终设法通过其中的一些功能组合成一个单一的功能至少清理了一下,一个“如果”语句

相关问题