pygame: изменение размера поверхности, на которой основан подкласс

#python #pygame #surface

#python #pygame #Поверхность

Вопрос:

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

 game_obj(pygame.Surface)
    def __init__(self, x, y, width, height):
      super(game_obj, self).__init__((width, height)
  

Позже в игре я хочу, чтобы объект изменил размер, поэтому я снова вызвал super(), но, похоже, у него неправильный размер, или когда я заполняю его, он заполняется неправильно. Есть ли что-то еще, что мне нужно сделать?

Комментарии:

1. повторное использование только super() не меняет его. Использование super().__init__() может изменить это, но я бы предпочел создать новый экземпляр game_obj с новым размером и скопировать элементы из старого экземпляра в новый и удалить старый экземпляр. Или я бы создал объект с двумя поверхностями — меньшей и большей и сохранил обе.

2. Спасибо, выполнение Surface.init (self, w, h) сработало!! Не вижу стрелки вверх, чтобы я мог пометить ее как лучший ответ, сделаю это, когда появится стрелка!

Ответ №1:

Повторное использование only super() ничего не меняет. Использование super().__init__() может изменить это, но я бы предпочел создать новый экземпляр game_obj с новым размером и скопировать элементы из старого экземпляра в новый и удалить старый экземпляр.

Или я бы создал объект с двумя поверхностями — меньшей и большей — и сохранил обе.

Комментарии:

1. Если нет какой-либо документально подтвержденной гарантии, что повторный вызов __init__() ничего не испортит, я бы не рекомендовал этого делать. Например, это может быть просто вызов SDL_CreateRGBSurface без освобождения поверхности от первого __init__() .