2015-09-22 6 views
1

Я нашел множество учебных пособий о том, как и когда использовать спрайты, но я до сих пор не знаю, что они собой представляют или что они делают. Идея по умолчанию состоит в том, что вы подклассифицируете класс pygame.sprite.Sprite и добавляете атрибуты rect и image. Но почему мне нужно подклассифицировать класс Sprite, как это влияет на мой код? я могу просто сделать это в любом случае:Что такое спрайты PyGame, и что они делают?

class MySprite: # No subclassing! 
    def __init__(self, image): 
     self.image = image 
     self.rect = image.get_rect() 

И это, кажется, работает нормально. Я также пробовал использовать исходный код, но couldn't find a sprite file.

+0

Вы найдете исходный код класса 'Sprite' в файле' 'sprite.py' '(https://bitbucket.org/pygame/pygame/src/8bdcd449963fd969c2609dea7134f52d1944ad0f/lib/sprite.py?tat = по умолчанию & FileViewer = файл вида по умолчанию). – sloth

ответ

2

Спрайты - это просто объекты в игре, которые могут взаимодействовать с другими спрайтами или чем-то еще. Они могут включать персонажи, здания или другие объекты игры.

Причина, по которой есть подкласс для спрайтов, более удобна. Когда объект наследуется от класса sprite.Sprite, он может быть добавлен в группу спрайтов.

Пример:

import pygame 

class car(sprite.Sprite): 
    def __init__(self): 
     sprite.Sprite.__init__() # necessary to initialize Sprite class 
     self.image = image # insert image 
     self.rect = self.image.get_rect() #define rect 
     self.rect.x = 0 # set up sprite location 
     self.rect.y = 0 # set up sprite location 
    def update(self): 
     pass # put code in here 

cars = pygame.sprite.Group()# define a group 

pygame.sprite.Group.add(car())# add an instance of car to group 

Я не могу добавить спрайты спрайт группы, если они не наследуют от класса спрайтов. Это полезно, потому что теперь я могу делать вещи, как обновление всех спрайтов в группе и сделать их все с одной функцией:

cars.update() #calls the update function on all sprites in group 
cars.draw(surface) #draws all sprites in the group 

Я могу также использовать группы для обнаружения столкновений:

# check to see if sprite collides with any sprite in the car group 
collided = pygame.sprite.Sprite.spritecollide(sprite, cars, False) 

Примечание: В приведенном выше коде pygame.sprite.Sprite.spritecollide возвращает список.

В заключение, класс спрайтов полезен для обработки большого количества спрайтов, которые в противном случае занимали бы больше кода для управления. Класс Sprite предоставляет универсальный набор переменных, которые могут использоваться для определения спрайтов.

0

При подклассе вы наследуете методы и функции в классе. Класс pygame.sprite содержит много предварительно написанных методов, которые вы можете вызвать без необходимости вручную перекодировать все.

Если вы решили создать осиротевший/независимый класс MySprite, как вы это делали выше, вы не сможете использовать какой-либо предварительно написанный код. До тех пор, пока вы в порядке, полностью используя все функции своего класса, все в порядке.

Смежные вопросы