有没有办法杀死一个 Pygame 精灵而不必成群结队地杀死它?
Is there a way to kill a Pygame sprite without having to kill it in a group?
我只有一个球精灵,我真的不需要一组。我想将该精灵设置为在到达屏幕末尾时被删除(或杀死),这样它也会生成另一个精灵。我正在尝试在没有团队的情况下执行此操作,并想知道这是否可行。感谢您的专业知识。
我在 sprite class 的更新方法中尝试了 self.kill() 和 kill.self。那没有用。我试图在应用程序的屏幕更新循环中执行终止操作。那没有用。我做了广泛的研究,所有的答案都是在使用组时。我也尝试过 "if not 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
class,调用Sprite.kill
方法就没有意义了。它所做的只是从其所有组中删除 Sprite。调用 kill
不会神奇地将 Sprite
从您的游戏中移除。
如果您想删除 Sprite
,请停止使用它:停止在 update_screen
函数中调用 ball.blitme()
和 ball.update()
,或者替换 ball
与你的 Sprite 的新实例 class.
但考虑开始实际使用 Group
class。它会让你的生活更轻松。
检查球是否在屏幕内,而不是
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()
将检查 Rect
是否为Ball
仍在屏幕内。
然后我们为小球设置一个新的位置。
另请注意,精灵 class 中通常不需要 x
和 y
属性,因为该位置已存储在 rect
属性中。
我只有一个球精灵,我真的不需要一组。我想将该精灵设置为在到达屏幕末尾时被删除(或杀死),这样它也会生成另一个精灵。我正在尝试在没有团队的情况下执行此操作,并想知道这是否可行。感谢您的专业知识。
我在 sprite class 的更新方法中尝试了 self.kill() 和 kill.self。那没有用。我试图在应用程序的屏幕更新循环中执行终止操作。那没有用。我做了广泛的研究,所有的答案都是在使用组时。我也尝试过 "if not 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
class,调用Sprite.kill
方法就没有意义了。它所做的只是从其所有组中删除 Sprite。调用 kill
不会神奇地将 Sprite
从您的游戏中移除。
如果您想删除 Sprite
,请停止使用它:停止在 update_screen
函数中调用 ball.blitme()
和 ball.update()
,或者替换 ball
与你的 Sprite 的新实例 class.
但考虑开始实际使用 Group
class。它会让你的生活更轻松。
检查球是否在屏幕内,而不是
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()
将检查 Rect
是否为Ball
仍在屏幕内。
然后我们为小球设置一个新的位置。
另请注意,精灵 class 中通常不需要 x
和 y
属性,因为该位置已存储在 rect
属性中。