pygame
Основы
Поиск…
Рисование и базовая анимация
Эта программа рисует некоторые формы и « привет мир! 'и пусть изображение идет в каждый угол окна.
полный код:
import pygame,sys
from pygame.locals import *
pygame.init()
FPS = 30 #frames per second setting
fpsClock = pygame.time.Clock()
#set up the window
screen = pygame.display.set_mode((500,400), 0, 32)
pygame.display.set_caption('drawing')
#set up the colors
black = ( 0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = ( 0, 255, 0)
blue = ( 0, 0, 255)
imageImg = pygame.image.load('baddie.png')
imagex = 320
imagey = 220
direction = 'left'
fontObj = pygame.font.Font('freesansbold.ttf', 32)
text = fontObj.render('Hello World!', True, green, blue)
rect = text.get_rect()
rect.center = (200, 150)
# the main game loop
while True:
screen.fill(white)
# draw a green polygon onto the surface
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
# draw some blue lines onto the surface
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
# draw a blue circle onto the surface
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
# draw a red ellipse onto the surface
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
# draw a red rectangle onto the surface
pygame.draw.rect(screen,red, (200, 150, 100, 50))
# draw the text onto the surface
screen.blit(text, rect)
if direction == 'right':
imagex += 5
if imagex == 320:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 220:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(imageImg, (imagex, imagey))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(FPS)
настройка pygame и окна:
import pygame,sys
from pygame.locals import *
pygame.init()
#set up the window
screen = pygame.display.set_mode((500,400), 0, 32)
pygame.display.set_caption('drawing')
рисуя белый фон:
В этой функции вы определяете цвет фона.
screen.fill(white)
рисунок зеленого полигона:
Здесь вы определяете поверхность дисплея, цвет и положение каждого угла многоугольника (координаты x и y), вы можете делать это по часовой стрелке и против часовой стрелки.
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
рисование синих линий:
В этой функции вы определяете поверхность дисплея, цвет, первую и последнюю точку и ширину линии (если вы не даете ширину, это всего лишь 1).
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
рисуя синий круг:
В этой функции вы определяете поверхность дисплея, цвет, положение, радиус и ширину круга (если вы даете 0 для ширины, это простой круг).
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
рисование эллипса:
В этой функции вы определяете поверхность дисплея, цвет, положение, горизонтальный размер и вертикальный размер и ширину.
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
рисование прямоугольника:
В этой функции вы определяете поверхность дисплея, цвет, положение и горизонтальный и вертикальный размер.
pygame.draw.rect(screen,red, (200, 150, 100, 50))
определение текста:
Сначала вы определяете тип и размер текста с помощью этой функции:
fontObj = pygame.font.Font('freesansbold.ttf', 32)
Затем вы определяете фактический текст, если текст выделен жирным шрифтом, цвет и, если хотите, цвет маркировки. Вы можете сделать это с помощью этой функции:
text = fontObj.render('Hello World!', True, green, blue)
Если вы хотите пометить свой текст, вы должны сказать pygame, что с помощью этой функции:
rect = text.get_rect()
И если вы хотите определить положение центра текста, вы можете сделать это с помощью этой функции:
rect.center = (200, 150)
составление текста:
Если вы определили маркировку и / или центр:
screen.blit(text, rect)
В противном случае вам необходимо определить положение текста, поэтому нарисуйте текст таким образом:
screen.blit(text, (100,50))
определение изображения:
Здесь вы определяете, какое изображение вы хотите использовать (если вы это сделаете, файл изображения должен находиться в том же каталоге, что и файл вашей программы), начальную позицию (x и y) и направление изображения.
image = pygame.image.load('image.png')
baddiex = 320
baddiey = 220
direction = 'left'
анимация изображения:
С этой частью кода мы проверяем направление изображения, если оно достигло угла, если это так, измените направление, если нет, нарисуйте изображение на 5 пикселей дальше в том же направлении.
if direction == 'right':
imagex += 5
if imagex == 360:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 260:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(imageImg, (imagex, imagey))
note: Мое изображение 20x20 пикселей, я использую if imagex == 360:
и if imagey == 260:
потому что тогда мое изображение составляет 20 пикселей от края окна, как и другие 2 угла. Если ваше изображение имеет другой размер, вам, вероятно, придется изменить эти числа.
проверка на выход:
Здесь мы проверяем, закрыли ли вы окно pygame, и если да, закройте окно, если вы не пишете это где-то в своей программе, вы, вероятно, не сможете закрыть окно.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
обновление экрана:
С помощью этой функции вы обновляете экран, чтобы все, что вы нарисовали, стало видимым.
pygame.display.update()
Настройка FPS:
С помощью этой функции вы скажете pygame, чтобы спать достаточно, чтобы ваша настройка FPS соблюдалась.
fpsClock.tick(FPS)
Использование с PIL
Когда вы должны использовать как PIL, так и Pygame, потому что отсутствуют функциональные возможности в обоих из них, вам нужен способ конвертировать между Pygame Surfaces и изображениями PIL, желательно, не записывая их на диск.
Для этого вы можете использовать функции «tostring» и «fromstring», предоставляемые в обеих библиотеках.
Преобразование из PIL в Pygame:
strFormat = 'RGBA'
raw_str = image.tostring("raw", strFormat)
surface = pygame.image.fromstring(raw_str, image.size, strFormat)
Преобразование из Pygame в PIL:
strFormat = 'RGBA'
raw_str = pygame.image.tostring(surface, strFormat, False)
image = Image.frombytes(strFormat, surface.get_size(), raw_str)