2012-01-16 54 views
0

我想創建一個與用戶碰撞的對象列表。但是,我不想使用sprite.collide_rect_ratio()方法,因爲它會創建一個對於碰撞來說太大的矩形區域(即,即使物體並不真正觸摸,物體似乎也會碰撞)。我想使用pygame.sprite.collide_rect_ratio(比率):解決問題。我該如何實現該方法才能返回用戶碰撞的對象列表?按比例執行碰撞方法

這將實現同樣的代碼,除了以更小的碰撞區域如下面的代碼:

sprite_list = pygame.sprite.spritecollide(myself, all_sprites_list, False) 

謝謝。

回答

0

這可能是對你有用的,

你可能想看看什麼是「每像素碰撞」,這將首先使用對象的邊界框(我懷疑collide_rect功能一樣)。

你需要做的是找到矩形相互碰撞的位置以及它們之間的距離。然後檢查是否有任何不透明的像素從一個精靈觸摸到另一個精靈的任何不透明像素...

This Link可能對您有用,它是一個類似於pygame的C++框架。

每個像素碰撞代碼是在頁面中間的一半,並行爲如上所述。 希望這對你有用,因爲它抵消了由於'看不見的碰撞'而需要的矩形比例。

快速谷歌搜索可能會幫助您更多地使用這種類型的碰撞檢測。

對於有些升壓繼承人一些示例代碼的Pygame的:

for s in sprites: 
    # if no intersection then 'intersection' will be of size 0 
    intersection = s.Rect.clip(user.rect) 
    if intersection.width != 0 and intersection.height != 0: 
     # perform collision detection 

Here is an already written and tested version從pygame的維基。閱讀該頁面上的所有內容將爲您提供關於像素碰撞的良好知識以及一些可以立即使用的良好示例代碼。

道歉,如果這是太遙遠的話題,但我覺得這可能是非常有用的你,因爲比率(我覺得)不會很好的碰撞檢測。

您可能還想看看pygame中的Rectangle documentation


至於你的問題,經過全體精靈循環和使用collide_rect_ratio方法是使用這種方法來獲得碰撞精靈的名單,據我所知道的唯一途徑。

+0

你會如何在pygame中實現「Per Pixel Collision」? – user1111042 2012-01-16 17:13:44

+0

I在答案中包含了一小部分代碼,我將如何實現它。使用pygames'Rect.clip()'來得到精靈邊界框之間的交集,我可以做一個初步的碰撞檢測(比如你正在做什麼,從那裏我可以檢查每個像素在那個交集中,我會盡管擴展了'else'。 – Serdalis 2012-01-16 19:46:53