Вы можете написать функции, принимающие объекты pygame.Surface в качестве параметров:
class TV():
def __init__(self):
self.img = ...
### insert code to load image here
self.rect = self.img.get_rect()
def draw(self, surface):
surface.blit(self.img, self.rect.topleft)
def erase(self, surface, background):
surface.blit(background, self.rect)
Я лично не знаю, насколько быстро/медленнее это сравнивается с другими сценариями на основе спрайтов, но это очень быстрый способ создать класс, который может рисовать/стирать сам.
Чтобы использовать его, просто создайте экран дисплея и телевизионный объект.
screen = pygame.display.set_mode((256, 256))
background = pygame.Surface((0,0),(256,256))
background.fill(pygame.Color(0,0,0))
screen.fill(pygame.Color(0,0,0))
myTVobj = TV()
Каждый раз, когда вы хотите сделать копию телевизора на экран вы звоните
myTVobj.draw(screen)
Чтобы удалить объект, используйте
myTVobj.erase(screen, background)
Затем вы можете сделать прикольные вещи позже с объектами, созданными из телевизионного класса, например, вставлять их в список.
tv_list = []
tv_list.append(myTVobj)
Вы можете добавить целую кучу телевизоров в список и нарисовать их все в одно и то же время.
tv_list = []
tv_list.append(myTVobj)
tv_list.append(myTVobj)
tv_list.append(myTVobj)
for tv in tv_list:
tv.draw(screen)
Или вы можете удалить их, просто изменив одну строку
for tv in tv_list:
tv.erase(screen)
Наконец, вы можете добавить еще одну функцию к телевизору класса, что позволяет перемещать его. Если вы относитесь к правильному члену как к «маркеру позиции», все, что вам нужно сделать, это играть с его членами (хе-хе), чтобы изменить местоположение обновления на экране вашего объекта.
def move(self, move_amount=(1,0):
self.rect.move_ip(move_amount[0], move_amount[1])
Хороший ответ. Но это действительно раздражает делать такие вещи, как: dostuff (tv, main, houses, building, people, tiles) – SuperDisk
@SuperDisk: Согласен. Вот почему вы пытаетесь писать классы, которые создаются с помощью свойств. И методы работают над этими свойствами. Это был очень простой пример того, как писать модули. Как вы можете видеть во многих примерах pygame, люди подклассифицируют существующие классы для создания пользовательских материалов. Правильно, вам не нужно вызывать функцию с 10 аргументами. – jdi