簡體   English   中英

有沒有一種方法可以殺死Pygame精靈而不必在一個小組中殺死它?

[英]Is there a way to kill a Pygame sprite without having to kill it in a group?

我只有一個球精靈,我真的不需要一個小組。 我想將精靈設置為到達屏幕末端時將其刪除(或殺死),因此它還會生成另一個精靈。 我正嘗試在沒有團隊的情況下進行此操作,並想知道是否可行。 感謝您的專業知識。

我在sprite類的更新方法中嘗試過self.kill()和kill.self。 那沒用。 我試圖在該應用程序的屏幕更新循環中進行殺死。 那沒用。 我進行了廣泛的研究,所有的答案只有在使用小組時才可以。 我也嘗試做“如果不是pygame.surface.rect.contains(Ball())”,那是行不通的。 (就是這樣,我嘗試了該表達式的幾種變體。)

def update(self):
    """Move the ball down"""
    self.y = self.y + 1
    self.rect.y = self.y 
    #print("Screen is: " + str(pygame.surface.rect()))
    print("Object is: " + str(self.rect))
    if (self.rect.y >= 800):
         self.kill()





def update_screen(screen, ball, lamp):
    #Show on the screen
    screen.fill((135,206,250))
    lamp.blitme()
    ball.blitme()
    ballgen(screen)
    ball.update()
    lamp.update()
    pygame.display.flip()

我希望結果停止對球的直角計數,但是它一直在遞增計數,因此讓我認為它沒有被移除。

如果不使用Group類,則調用Sprite.kill方法毫無意義。 它所做的就是從所有組中刪除Sprite。 調用kill不會從游戲中神奇地刪除Sprite

如果要刪除Sprite ,請停止使用它:要么停止在update_screen函數中調用ball.blitme()ball.update() ,要么將ball替換為Sprite類的新實例。

但是請考慮開始實際使用Group類。 這會讓您的生活更輕松。

檢查球是否在屏幕內,而不是

if not pygame.surface.rect.contains(Ball())

采用

if not pygame.display.get_surface().get_rect().contains(self.rect):
    self.rect.center = (whatever_new_position, ....)

Ball的更新方法中。 pygame.display.get_surface()將為您提供屏幕表面, get_rect()將為您提供該SurfaceRectcontains()將檢查BallRect是否仍在屏幕內。

然后我們只是為球設置一個新位置。

還要注意,由於位置已經存儲在rect屬性中,因此在Sprite類中通常不需要xy屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM