2014-02-20 109 views
0

我是Python/Pygame的新手。我已經能夠在小測試程序中拼湊一些東西,但試圖掌握碰撞並沒有發生。我已經嘗試了多個教程,但是我覺得我需要在完全瞭解它之前將其完全分解。Pygame碰撞解釋

有人可以解釋像colliderect(Rect)是如何工作的? 我是否需要碰撞函數的類,或者我只需要兩個矩形並獲得結果?

我正在嘗試使用的代碼如下。我能夠製作兩個圖像,每個圖像都包含一個矩形,我假設碰撞只適用於精靈而不是圖像?我可以用我的鼠標控制其中一個圖像,並且當我將鼠標懸停並單擊靜態圖像時,我想觸發一次碰撞檢測。

任何幫助將不勝感激。

THX

〜牛逼

pygame.init() 
clock = pygame.time.Clock() 

size=width, height= 600,400 
screen = pygame.display.set_mode(size) 

rageface = pygame.image.load("rageface.jpg") 
rageface = pygame.transform.scale(rageface,(100,100)) 
rageface2 = pygame.transform.scale(rageface,(100,100)) 

black = (100,0,0) 
green = (0,150,150) 
r=0 
x=50 
y=50 
mx,my = pygame.mouse.get_pos() 

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 
     elif event.type == MOUSEBUTTONDOWN: 
      mx,my = pygame.mouse.get_pos() 

    #colliderect(Rect) ???????????????????? 

    screen.fill((r,0,0)) 

    pygame.draw.rect(screen, black, [50, 50, 250, 100], 0) 
    pygame.draw.rect(screen, green, [mx-50, my-50, 250, 100], 0) 
    screen.blit(rageface2,(mx-50,my-50)) 
    screen.blit(rageface,(x,y)) 


    clock.tick(60) 

    pygame.display.flip() 

回答

0

colliderect是這樣工作的:

rect1.colliderect(rect2) 

這將返回True如果兩個矩形的碰撞,False否則。

這裏是documentation

colliderect是pygame的Rect類的方法,精靈也有碰撞方法

在pygame的一個被加載的是表面就像pygame的屏幕/顯示器,到圖像從表面得到一個矩形使用:

Surface.get_rect() 

因此,要獲得一個發言權rageface只是做rage_rect = rageface.get_rect(),現在你可以使用rage_rect像一個矩形

告訴我,如果這是明確的,或者您需要更多的幫助!

+0

非常酷!謝謝。這正是我需要的。 :)我得到它的工作。出於某種原因,當我使用surface.get_rect時,碰撞正在返回true,然後纔將圖像實際移動到彼此之上。無論如何,我會一直搞亂它,看看我能做些什麼。再次感謝! – Tun

+0

是的,沒問題,Pygame起初可能有點混亂,但一旦你掌握了它,它真的很有趣!祝你好運! – Serial