2017-09-26 47 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

我最終設法通過其中的一些功能組合成一個單一的功能至少清理了一下,一個「如果」語句

相關問題