Similar presentations:
PyGame-события, музыка, картинки
1. PyGame:
Изображения2.
Исходный кодimport pygame as pg
size = (1000, 250)
my_scr = pg.display.set_mode(size)
quadro = pg.Rect(0,125,20,20)
fps = 100
clock = pg.time.Clock()
while True:
my_scr.fill(pg.Color(47, 39, 121))
pg.draw.rect(my_scr, pg.Color("red"), quadro)
for event in pg.event.get():
if event.type == pg.QUIT:
quit()
pg.display.flip()
clock.tick(fps)
Скачайте картинки для проекта отсюда
3.
Загрузка картинокЗапишите перед циклом переменные, в которые
сохраните картинки. Например, у нас это будет персонаж
и фон:
character = pg.image.load("имя.файла")
background = pg.image.load("имя.файла")
Обратите внимание, что картинки нужно поместить в одну
папку с файлом .py.
4.
Отрисовка изображений в окне программыОтрисовка происходит в цикле. Описываем отрисовку по
правилам слоёв: чем дальше объект от зрителя, тем раньше его
отрисуют. Например, самым первым отрисовывают фон и уже
после разные объекты и персонажей.
screen.blit(character, (через запятую координаты по x и y левой
верхней точки изображения))
Если нужно скорректировать размер картинки, сразу после её
загрузки (перед циклом) изменим её размер:
character = pg.transform.scale(character, (размеры через запятую по x и
y))
5.
Точка отрисовки = координаты левойверхней точки прямоугольника, в
которую вписана картинка
6. PyGame:
События. Программирование кнопокклавиатуры и мыши
7.
Получение сигнала о нажатии клавишиЧтоб в моменте получить информацию о нажатии
нажатых клавиш будем использовать в цикле (после
отрисовки) список с сигналом:
keys = pg.key.get_pressed()
Далее - просто расписываем, что делает та или иная клавиша
клавиатуры с изображением:
if keys[pg.K_LEFT]:
quadro.x -= 10
8.
Получение сигнала о нажатии клавишиТакое описание события, как на прошлом слайде, обеспечивает непрерывность
нажатия для такого же беспрерывного перемещения объекта.
А управление кнопкой закрытия окна (в исходном файле) сделано по модели
однократного выполнения события для однократного действия.
Сравните
программой:
управление
персонажем,
for event in pg.event.get():
if event.type == pg.KEYDOWN:
if event.key == pg.K_LEFT:
quadro.x-=5
if event.key == pg.K_RIGHT:
quadro.x+=5
if event.key == pg.K_UP:
quadro.y-=5
if event.key == pg.K_DOWN:
quadro.y+=5
которое
вы
уже
записали
с
такой
9.
Границы перемещенияСейчас
вы
можете
заметить,
что
непрерывное
перемещение однажды приводит к тому, что объект
скрывается за пределами окна. Исправим это. До цикла
создайте логическую переменную. Логической является та
переменная ,у которой только 2 значения - истина и ложь:
napravlenie = True
До тех пор, пока соответствующая координата объекта не
совпадет с границей окна, объект будет двигаться в
выбранном направлении, но как только он достигнет
предельных координат, он остановится.
10.
Границы перемещенияif napravlenie:
character.x+=1
if character.right == 1000:
napravlenie = False
else:
character.x -= 1
if character.left == 0:
napravlenie = True
11. PyGame:
Фоновая музыка и звуки12.
Загрузка и воспроизведение фоновой музыкиДля инициализации звуковых файлов в игре, сразу после
import pygame запишем:
pg.mixer.init()
Далее - просто загружаем звуковой файл подобно картинке,
но тут не обойтись без упоминания mixer и music:
pg.mixer.music.load("название.файла")
13.
Загрузка и воспроизведение фоновой музыкиДля воспроизведения фоновой музыки до цикла:
pg.mixer.music.play()
Управление звуком:
pg.mixer.music.set_volume(0.3)-- громкость по умолчанию 1
pg.mixer.music.stop()-- остановка воспроизведения
pg.mixer.music.pause()-- пауза в воспроизведении
14.
Добавление отдельных звуков и ихпрограммирование
Загрузка разового звука до цикла:
Sound1 = pg.mixer.Sound("имя.файла")
Управление звуком:
Sound1.play() -- эту строчку записываем в том месте в цикле, где
должно произойти воспроизведение звука (например, при
достижении границы окна персонажем)
15.
ЗаданиеДобавьте любой объект в игру и сделайте так, чтобы при
касании персонажем этого объекта воспроизводился другой
звук. Для описания столкновения спрайтов используют
функцию
spritecollide(),
а
для
программирования
дополнительного действия от столкновения используют цикл:
Hits = pg.sprite.spritecollide(кто столнулся?, с чем столкнулся,
нужно ли удалить 2й объект - False(если не удаляем))
for hit in hits:
---что сделать, если столкнулись
programming