[英]There is a way to shot multiple times a Sprite (pygame) before kill it from a group?
[英]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()
將為您提供該Surface
的Rect
, contains()
將檢查Ball
的Rect
是否仍在屏幕內。
然后我們只是為球設置一個新位置。
還要注意,由於位置已經存儲在rect
屬性中,因此在Sprite類中通常不需要x
和y
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.