pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
def Score_Change():
global Score
Score += 1
print(Score) #For testing purposes
這條線讓兩個相撞的敵人消失。然而在最後的作用始終是出於某種原因,我希望它只是來吧當敵人碰撞Pygame在敵人相撞時更新得分
pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
def Score_Change():
global Score
Score += 1
print(Score) #For testing purposes
這條線讓兩個相撞的敵人消失。然而在最後的作用始終是出於某種原因,我希望它只是來吧當敵人碰撞Pygame在敵人相撞時更新得分
每次該行執行
pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
,Score_Change()
將被調用,這裏面的代碼函數將被執行,並且其返回值(None
)將作爲collided
參數傳遞給groupcollide
函數。
請注意,最後一個參數需要一個函數來計算兩個精靈是否碰撞。從文檔:
collided
參數是一個回調函數,用於計算兩個精靈是否發生碰撞。它應該以兩個精靈作爲值並返回一個布爾值來指示它們是否正在碰撞。如果collided
沒有通過,那麼所有精靈都必須有一個「rect」值,它是精靈區域的一個矩形,它將用於計算碰撞。
您通常會傳遞像pygame.sprite.collide_mask
或pygame.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)
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:這個功能不處理去除該碰撞
兩個敵人