Что означает параметр DestSurface в Pygame.transform.scale и как его использовать? - PullRequest
1 голос
/ 03 февраля 2020

Документация для метода pygame.transform.scale выглядит следующим образом.

scale(Surface, (width, height), DestSurface = None) -> Surface`

Изменение размера поверхности до нового разрешения. Это операция быстрого масштабирования, которая не производит выборку результатов.

Можно использовать дополнительную поверхность назначения, вместо того, чтобы создавать новую. Это быстрее, если вы хотите многократно масштабировать что-то. Однако размер пункта назначения должен совпадать с размером (ширины, высоты). Также поверхность назначения должна иметь тот же формат. "

Я пытаюсь выяснить, что такое поверхность назначения. I Я предполагаю, что это как-то связано с тем, что каждый раз, когда я масштабирую поверхность, создается новый объект поверхности, и как я могу избежать этого, используя DestSurface?

1 Ответ

1 голос
/ 03 февраля 2020

pygame.transform.scale() не масштабирует саму поверхность ввода. Создает новую поверхность и масштабирует «блиц» на новой поверхности. Новая поверхность возвращается возвращаемым значением:

pygame.transform.scale() делает:

  1. Создает новую поверхность (newSurface) с размером (width, height).
  2. Масштабирование и копирование Surface в newSurface.
  3. Возврат newSurface.

Поверхность назначения - pygame.Surface, где масштабированная поверхность копируется в. Это быстрее, потому что память для Surface не должна быть выделена.

Она установлена ​​DestSurface, затем pygame.transform.scale() делает:

  1. Масштабирование и копирование Surface DestSurface.
  2. Возврат DestSurface.

По этой причине размер DestSurface должен быть (width, height), формат DestSurface имеет такой же, как и формат Surface.


Возможный вариант использования: вам нужно постоянно масштабировать что-то до фиксированного размера в основном приложении l oop (например, если поверхность динамически генерируется). Далее предполагается, что surf является поверхностным объектом:

while True:
    # [...]

    scaledSurf = pygame.transform.scale(surf, (100, 100)) 
    window.blit(scaledSurf, (x, y)

Код можно улучшить с помощью параметра DestSurface:

scaledSurf = pygame.Surface((100, 100))

while True:
    # [...]

    pygame.transform.scale(surf, (100, 100), scaledSurf) 
    window.blit(scaledSurf, (x, y)

Это, вероятно, редкий дело. В общем, вы должны пытаться масштабировать поверхности при инициализации, а не непрерывно в приложении l oop и использовать масштабированные поверхности в l oop.


Не пытайтесь использовать параметр принудительно и не «создавайте» сценарий использования для параметра DestSurface. Сделай это наоборот. Напишите ваше приложение и заставьте его работать. Затем выясните, может ли параметр DestSurface улучшить ваш конкретный c вариант использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...