我只有一个球精灵,我真的不需要一个小组。我想将精灵设置为到达屏幕末端时将其删除(或杀死),因此它还会生成另一个精灵。我正尝试在没有团队的情况下进行此操作,并想知道是否可行。谢谢您的专业知识。
我在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()
我希望结果停止对球的直角计数,但是它一直在递增计数,因此让我觉得它没有被移走。
答案 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类中通常不需要Ball
和x
属性。