Это не работает, потому что когда код вызывает normal()
, это создает новый экземпляр объекта. Таким образом, вызов:
if my_sprite == normal():
говорит «это мой существующий объект спрайта == этот новый объект спрайта», что никогда не соответствует действительности. Вы можете использовать функцию python для type()
объекта, чтобы сделать то же самое, или добавить свою собственную функцию типа, как я представил в коде ниже.
Я бы отслеживал состояние спрайта внутри класса и некоторые функции grow()
и shrink()
используются для автоматического изменения размера.
class GrowingSprite( pygame.sprite.Sprite, x, y ):
def __init__( self ):
#etc, list of images to create the animation
self.image_short = ... # load "short" image
self.image_tall = ... # load "tall" image
# Set the initial state
self.image = self.image_short # start short
self.rect = self.image.get_rect()
self.rect.centerx = x
self.rect.centery = y
self.state = 'short'
def getState( self ):
return self.state
def grow( self ):
self.state = 'tall'
self.image = self.image_tall
current_x = self.rect.centerx # preserve existing location
current_y = self.rect.centery
self.rect = self.image.get_rect()
self.rect.center = ( current_x, current_y )
def shrink( self ):
self.state = 'short'
self.image = self.image_short
current_x = self.rect.centerx # preserve existing location
current_y = self.rect.centery
self.rect = self.image.get_rect()
self.rect.center = ( current_x, current_y )