2016-11-17 48 views
0
pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change()) 

def Score_Change(): 
    global Score 
    Score += 1 
    print(Score) #For testing purposes 

這條線讓兩個相撞的敵人消失。然而在最後的作用始終是出於某種原因,我希望它只是來吧當敵人碰撞Pygame在敵人相撞時更新得分

回答

2

每次該行執行

pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change()) 

Score_Change()將被調用,這裏面的代碼函數將被執行,並且其返回值(None)將作爲collided參數傳遞給groupcollide函數。

請注意,最後一個參數需要一個函數來計算兩個精靈是否碰撞。從文檔:

collided參數是一個回調函數,用於計算兩個精靈是否發生碰撞。它應該以兩個精靈作爲值並返回一個布爾值來指示它們是否正在碰撞。如果collided沒有通過,那麼所有精靈都必須有一個「rect」值,它是精靈區域的一個矩形,它將用於計算碰撞。

您通常會傳遞像pygame.sprite.collide_maskpygame.sprite.collide_circle這樣的函數作爲此參數。

因此,如果碰撞發生,您似乎期望Score_Change被調用。事實並非如此。你可以做的是一樣的東西:

for k, v in pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True): 
    # k is the enemy 
    # v is a list of bullets that them 
    global Score 
    Score += 1 
    print(Score) 
0

documentation

groupcollide(1組,第2組,dokill1,dokill2,相撞=無) - > Sprite_dict

發生碰撞的說法是一個回調函數,用於計算兩個精靈是否碰撞。它應該以兩個精靈作爲值,並返回一個布爾值來指示它們是否正在碰撞。如果碰撞不是 通過,則所有精靈必須有一個「rect」值,這是精靈區域的一個 矩形,它將用於計算 衝突。

正在調用您正在傳遞的函數Score_Change以檢查兩個單元是否發生碰撞。

groupcollide返回已經發生碰撞的元素的字典。這可以幫助你通過檢查多少敵人相撞計算得分:

collisions = pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True) 
increment_score(len(collisions)) 

def increment_score(amount = 1): 
    global Score 
    Score += amount 
    print(Score) #For testing purposes 

PS:這個功能不處理去除該碰撞

兩個敵人