有没有一种方法可以杀死Pygame精灵而不用成组杀死它?

时间:2019-05-28 22:44:47

标签: python pygame sprite

我只有一个球精灵,我真的不需要一个小组。我想将精灵设置为到达屏幕末端时将其删除(或杀死),因此它还会生成另一个精灵。我正尝试在没有团队的情况下进行此操作,并想知道是否可行。谢谢您的专业知识。

我在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()

我希望结果停止对球的直角计数,但是它一直在递增计数,因此让我觉得它没有被移走。

1 个答案:

答案 0 :(得分:0)

如果不使用Group类,则调用Sprite.kill方法毫无意义。它所做的就是从所有组中删除Sprite。调用kill不会神奇地从游戏中删除Sprite

如果要删除Sprite,只需停止使用它:要么停止在ball.blitme()函数中调用ball.update()update_screen,要么替换{{1} }和Sprite类的新实例。

但是请考虑开始实际使用ball类。它将使您的生活更轻松。

要检查球是否在屏幕内,而不是

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()的{​​{1}},而Rect将检查是否Surface contains()仍在屏幕内。

然后我们只为球设置一个新位置。

还要注意,由于位置已经存储在Rect属性中,因此在Sprite类中通常不需要Ballx属性。