Краткий ответ
Я еще не нашел места, где объясняется, когда мне нужно мигать или не включать определенную поверхность на экран.
Каждая операция будет вести себя по-разному, и вам необходимо прочитать документацию по функции, с которой вы работаете.
Длинный ответ
Что такое блиттинг?
Во-первых, вам нужно понять, что делает блиттинг. Ваш экран - это просто набор пикселей, а блиттинг - это полное копирование одного набора пикселей на другой. Например, у вас может быть поверхность с изображением, которое вы загрузили с жесткого диска, и вы можете отображать его несколько раз на экране в разных положениях, многократно копируя эту поверхность поверх поверхности screen
.
Итак, у вас часто бывает такой код ...
my_image = load_my_image()
screen.blit(my_image, position)
screen.blit(my_image, another_position)
В двух строках кода мы скопировали тонну пикселей с исходной поверхности (my_image) на экран путем «блиттинга».
Как функции pygame.draw. * Мигают?
Технически методы pygame.draw. * Могли быть написаны для чего-то подобного. Итак, вместо вашего примера ...
pygame.draw.circle(screen, COLOR, POS, RADIUS, WIDTH)
... они МОГЛИ заставить тебя это сделать ...
circle_surface = pygame.draw.circle(COLOR, RADIUS, WIDTH)
screen.blit(circle_surface, POS)
Если бы это было так, вы бы получили тот же результат. Однако внутри метод pygame.draw.circle()
напрямую манипулирует поверхностью, которую вы ему передаете, а не создает новую поверхность. Это могло быть выбрано как способ сделать что-то, потому что они могли заставить его работать быстрее или с меньшим объемом памяти, чем создание новой поверхности.
Так что же мне делать?
Итак, чтобы ответить на ваш вопрос о том, «когда использовать» и «когда не следует», в основном, вам нужно прочитать документацию, чтобы увидеть, что на самом деле делает функция.
Вот документы pygame.draw.circle ():
pygame.draw.circle ():
нарисуйте круг вокруг точки
круг (поверхность, цвет, положение, радиус, ширина = 0) -> Прямоугольник
Рисует круглую форму на поверхности. Аргумент pos - это центр круга, а радиус - это размер. Аргумент ширины - это толщина для рисования внешнего края. Если ширина равна нулю, круг будет заполнен.
Обратите внимание, что он говорит, что «рисует фигуру на поверхности», поэтому пиксельные изменения уже были изменены за вас. Кроме того, он не возвращает поверхность (он возвращает Rect, но он просто сообщает вам, где были сделаны изменения пикселей).
Теперь давайте посмотрим на документацию pygame.font.Font.render ():
рисовать текст на новой поверхности
рендеринг (текст, сглаживание, цвет, фон = Нет) -> Поверхность
Это создает новую поверхность с отрисованным на ней указанным текстом. Pygame не предоставляет возможности напрямую рисовать текст на существующей поверхности: вместо этого вы должны использовать Font.render () для создания изображения (поверхности) текста, а затем перенести это изображение на другую поверхность. ...
Как видите, в нем конкретно говорится, что текст рисуется на НОВОЙ поверхности, которая создается и возвращается вам. Эта поверхность НЕ является поверхностью вашего экрана (этого не может быть, вы даже не сказали функции render()
, что такое поверхность вашего экрана). Это довольно хороший признак того, что вам действительно нужно перенести эту поверхность на экран.
person
Mark Hildreth
schedule
03.07.2013
pygame.draw.circle(surface, ...)
будет рисовать прямо вsurface
. в то время какfont.Render()
возвращает новыйSurface
, но не выполняет рендеринг автоматически. pygame.org/docs/ref/font.html# pygame.font.Font.render - person ninMonkey   schedule 04.07.2013