[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский ]
Pyxel -- это игровой движок для Python в стиле ретро.
Благодаря своей простоте, вдохновленной старыми игровыми консолями (например, палитра состоит всего из 16 цветов, и только 4 звука могут быть проиграны одновременно), вы можете легко создавать игры в стиле пиксель-арт.
Спецификации и API Pyxel вдохновлены PICO-8 и TIC-80.
Pyxel -- программа с открытым кодом и бесплатна для использовния. За дело!
- Работает под управлением Windows, Mac, Linux и Web
- Код пишется на Python
- 16-цветная палитра
- 3 набора изображений 256x256 пикселей
- 8 тайлмапов 256x256 пикселей
- 4 канала с 64 определяемыми пользователем звуками
- 8 музыкальных композиций
- Ввод с клавиатуры, мышки или игрового контроллера
- Редактор изображений и звука
После установки Python3 (версии 3.7 или выше) необходимо выполнить следующую команду:
pip install -U pyxel
После установки Python3 (версии 3.7 или выше) необходимо выполнить следующую команду:
pip3 install -U pyxel
После установки пакета SDL2 (libsdl2-dev
для Ubuntu), Python3 (версии 3.7 или выше) и python3-pip
выполните следующую команду:
sudo pip3 install -U pyxel
Если вышеописанное не сработало, попробуйте выполнить самосборку в соответствии с инструкциями в Makefile.
Используя Pyxel Web Launcher или пользовательские элементы для HTML, вы можете запустить Pyxel в веб-браузере без какой-либо работы по установке.
Для получения конкретных инструкций, пожалуйста, обратитесь к этой странице.
После установки Pyxel, примеры Pyxel будут скопированы в открытую директорию по выполнении этой команды:
pyxel copy_examples
Список примеров, которые будут скопированы:
- 01_hello_pyxel.py - Простейшее приложение
- 02_jump_game.py - Игра прыжков с простейшими ресурсными файлами Pyxel
- 03_draw_api.py - Демонстрация API для рисования
- 04_sound_api.py - Демонстрация API для работы со звуком
- 05_color_palette.py - Цветовая палитра
- 06_click_game.py - Игра с кликами мышкой
- 07_snake.py - Змейка с BGM
- 08_triangle_api.py - Демонстрация API по рисованию треугольных полигонов
- 09_shooter.py - Игра жанра «убей всех» с переходом между экранами
- 10_platformer.py - Платформер с боковым скроллингом и картой
- 11_offscreen.py - Внеэкранный рендеринг с помощью класса Image
- 12_perlin_noise.py - Анимация шума Перлина
- 30SecondsOfDaylight.pyxapp - 1-я победная игра Pyxel Jam от Adam
- megaball.pyxapp - Аркадная игра с физикой мяча от Adam
Эти примеры могут быть запущены следующей командой:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30SecondsOfDaylight.pyxapp
После импортирования модуля Pyxel в ваш код на Python, сначала укажите размер окна с помощью команды init
, затем запустите Pyxel-приложение с помощью функции run
.
import pyxel
pyxel.init(160, 120)
def update():
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
def draw():
pyxel.cls(0)
pyxel.rect(10, 10, 20, 20, 11)
pyxel.run(update, draw)
Агрументы функции run
-- это функции update
для обновления внутренней игровой логики каждый кадр и функции draw
для отображения объектов на экране по мере необходимости.
В самом приложении рекомендуется свернуть код Pyxel в один класс (смотрите пример).
import pyxel
class App:
def __init__(self):
pyxel.init(160, 120)
self.x = 0
pyxel.run(self.update, self.draw)
def update(self):
self.x = (self.x + 1) % pyxel.width
def draw(self):
pyxel.cls(0)
pyxel.rect(self.x, 0, 8, 8, 9)
App()
Созданый сценарий на Python может быть запущен путём выполнения следующей команды:
pyxel run ИМЯ_PYTHON_ФАЙЛА
При использовании Pyxel в виде пакета сценарий может быть выполнен как обычный код на Python:
cd pyxel_examples
python3 ИМЯ_PYTHON_ФАЙЛА
(Под Windows, набирайте python
вместо python3
)
Следующие особые клавиши можно применять во время выполнения Pyxel-приложения:
Esc
Выйти из приложенияAlt(Option)+1
Выполнить снимок экрана и сохранить его на рабочий столAlt(Option)+2
Начать захват экрана игрыAlt(Option)+3
Сохранить видео, полученное захватом экрана на рабочий стол (до 10 секунд)Alt(Option)+0
Включить/выключить мониториг производительности (fps, время на update, время на draw)Alt(Option)+Enter
Войти/выйти из полноэкранного режима
Встроенный Pyxel Editor может создавать изображения и звуки, используемые в Pyxel-приложении.
Он запускается следующей командой:
pyxel edit [имя_ресурсного_файла]
Если указанный ресурсный файл (.pyxres) существует, то он будет загружен. В противном случае будет создан файл с указанным именем.
Если имя файла пропущено, то используется стандартное имя my_resource.pyxres
После запуска Pyxel Editor, можно переключаться между различными файлами способом drag-and-drop. Если данное действие произвести, зажав клавишу Ctrl(Cmd)
, то будет загружен только редактируемый в этот момент тип ресурса (изображения/карта тайлов/звук/музыка). Это позволяет комбинировать несколько ресурсных файлов в один.
Созданный ресурсный файл может быть загружен в программу с помощью функции load
.
Редактор Pyxel Editor оснащем следующими режимами редактирования.
Редактор изображений:
Режим редактирования наборов изображений.
Изображение (png/gif/jpeg) может быть загружено в выбранный набор путем перетаскивания png файла на экран редактора изображений.
Редактор тайлмапов:
Режим редактирования тайлмапов, в котором изоражения расположены в плиточном порядке.
Редактор звука:
Режим для редактирования звуковых файлов.
Редактор музыки:
Режим для редактирования музыки, в которой звуки расставлены в порядке проигрывания.
Изображения и карты тайлов Pyxel могут также быть созданы следующим образом:
- Создайте изображение из списка строк с помощью функций
Image.set
илиTilemap.set
. - Загрузите png файла, выполненный в палитре Pyxel, с помощью функции
Image.load
.
Звуки Pyxel могут также быть созданы следующим образом:
- Создайте звук из строк с помощью функций
Sound.set
илиMusic.set
.
Обратитесь к руководству по API (ниже) для получения более подробной информации об использовании этих функций.
Pyxel предлагает формат распространения приложений (файл Pyxel-приложения), работающий на всех поддерживаемых платформах.
Создать файл Pyxel-приложения (.pyxapp) можно с помощью следующей команды:
pyxel package корневой_каталог_приложения имя_файл_запускающего_скрипта
Если приложение должно включать в себя дополнительные ресурсы или модули, поместите их в каталог приложения.
Созданный файл приложения может быть запущен следующей командой:
pyxel play ФАЙЛ_PYXEL_ПРИЛОЖЕНИЯ
-
width
,height
Ширина и высота окна -
frame_count
Количество отрисованных кадров -
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Инициализирует Pyxel-приложение с указанными размерами экрана (width
,height
). Дополнительно могут быть заданы: заголовок окна с помощью параметраtitle
, количество кадров в секунду с помощью параметраfps
, клавиша для выхода из приложения —quit_key
, масштаб дисплея с помощьюdisplay_scale
, коэффициент масштабирования при захвате экрана —capture_scale
и максимальное время записи при захвате экрана с помощьюcapture_sec
.
Пример:pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
-
run(update, draw)
Запустить Pyxel-приложение, использующее функциюupdate
для обновления внутренней логики иdraw
для рисования. -
show()
Отрисовать кадр и ждать выхода из приложения по нажатию клавишиEsc
. -
quit()
Завершить работу Pyxel-приложения.
load(filename, [image], [tilemap], [sound], [music])
Загрузить ресурсный файл (.pyxres). Если False указано для типа ресурса (image/tilemap/sound/music
), соответствующий ресурс не будет загружен.
-
mouse_x
,mouse_y
Получить положение курсора мышки -
mouse_wheel
Получить значение колесика мышки -
btn(клавиша)
ПолучитьTure
, есликлавиша
нажата, в противном случае получитьFalse
. (Список определений клавиш) -
btnp(клавиша, [hold], [repeat])
ПолучитьTrue
, есликлавиша
нажата в данный кадр, в противном случае получитьFalse
. В случае, если указаны параметрыhold
иrepeat
,True
будет возвращено каждыеrepeat
кадров, когдаkey
уже зажата болееhold
кадров -
btnr(клавиша)
ПолучитьTrue
, есликлавиша
была отпущена в данный кадр, в противном случае получитьFalse
-
mouse(видна)
Установить видимость курсора: еслиvisible
равноTrue
, сделать виндым, еслиFalse
, то невидимым. Даже если курсор не отображается, его позицию всё равно можно получить соответствующими функциями.
-
colors
Список цветов палитры. Цвет кодируется 24-битным целым числом. Используйтеcolors.from_list
иcolors.to_list
для установки и получения списка Python.
Пример:org_colors = pyxel.colors.to_list(); pyxel.colors[15] = 0x112233; pyxel.colors.from_list(org_colors)
-
image(img, [system])
Оперировать набором изображенийimg
(0-2) (смотрите класс Image).
Пример:pyxel.image(0).load(0, 0, "title.png")
-
tilemap(tm)
Оперировать тайлмапомtm
(0-7) (смотрите класс Tilemap) -
clip(x, y, w, h)
Установить площадь рисования экрана с (x
,y
) до шириныw
и высотыh
. Сбросить площадь рисования до полного экрана можно с помощьюclip()
-
camera(x, y)
Изменить координаты левого верхнего угла экрана на (x
,y
). Координаты левого верхнего угла экрана могут быть сброшены в (0
,0
) вызовомcamera()
. -
pal(col1, col2)
Поменять цветcol1
с цветомcol2
во время рисования. Восстановить изначальную палитру можно с помощьюpal()
-
cls(col)
Заполнить (очистить) экран цветомcol
-
pget(x, y)
Получить цвет пикселя по координатам (x
,y
) -
pset(x, y, col)
Нарисовать пиксель цветаcol
по координатам (x
,y
) -
line(x1, y1, x2, y2, col)
Нарисовать отрезок цветаcol
из (x1
,y1
) в (x2
,y2
) -
rect(x, y, w, h, col)
Нарисовать прямоугольник ширины, высотыw
и цветаh
по координатам (x
,y
) -
rectb(x, y, w, h, col)
Нарисовать контур прямоугольника ширины, высотыw
и цветаh
по координатам (x
,y
) -
circ(x, y, r, col)
Нарисовать круг радиусаr
и цветаcol
центром в (x
,y
) -
circb(x, y, r, col)
Нарисовать окружность радиусаr
и цветаcol
центром в (x
,y
) -
elli(x, y, w, h, col)
Нарисуйте эллипс ширинойw
, высотойh
и цветомcol
из (x
,y
). -
ellib(x, y, w, h, col)
Нарисуйте контур эллипса ширинойw
, высотойh
и цветомcol
из (x
,y
). -
tri(x1, y1, x2, y2, x3, y3, col)
Нарисовать треугольник с вершинами в координатах (x1
,y1
), (x2
,y2
), (x3
,y3
) и цветаcol
-
trib(x1, y1, x2, y2, x3, y3, col)
Нарисовать контур треугольника с вершинами в координатах (x1
,y1
), (x2
,y2
), (x3
,y3
) и цветаcol
-
fill(x, y, col)
Нарисуйте эллипс ширинойw
, высотойh
и цветомcol
из (x
,y
). -
blt(x, y, img, u, v, w, h, [colkey])
Скопировать область размеров (w
,h
), по координатам (u
,v
) набора изображенийimg
(0-2) по координатам (x
,y
) на экране. Если дляw
и/илиh
установлено отрицательное значение, изображение будет развернуто горизонтально и/или вертикально. Если указан параметрcolkey
, соответствующий цвет будет считаться цветом фона (прозрачным цветом)
bltm(x, y, tm, u, v, w, h, [colkey])
Нарисовать из тайлмапаtm
(0-7) по координатам (x
,y
) тайл размером (w
,h
), находящийся по координатам (u
,v
). Если переданы отрицательные значенияw
и/илиh
, то изображение будет отражено по горизонтали и/или вертикали. Если указан параметрcolkey
, соответствующий цвет будет считаться цветом фона (прозрачным цветом). Размер тайла равен 8x8 точек и хранится в карте тайлов в виде кортежа(tile_x, tile_y)
.
text(x, y, s, col)
Нарисовать строку текстаs
цветаcol
по координате (x
,y
)
-
sound(snd)
Оперировать звукомsnd
(0-63).
Пример:pyxel.sound(0).speed = 60
-
music(msc)
Оперировать музыкойmsc
(0-7) (смотрите класс Music) -
play_pos(ch)
Получить позицию каналаch
(0-3) в виде кортежа(номер звука, номер ноты)
. ВозвращаетNone
если проигрывание выключено. -
play(ch, snd, [tick], [loop])
Проиграть звукsnd
(0-63) на каналеch
(0-3). Еслиsnd
— список, он будет проигран по порядку. Позиция начала воспроизведения может быть указана с помощьюtick
(1 tick = 1/120 секунды). Если в в качестве значенияloop
переданоTrue
, проигрывание будет зациклено. -
playm(msc, [tick], [loop])
Проиграть трекmsc
(0-7). Позиция начала воспроизведения может быть указана с помощьюtick
(1 tick = 1/120 секунды). Если в в качестве значенияloop
переданоTrue
, проигрывание будет зациклено. -
stop([ch])
Остановить воспроизведение на каналеch
(0-3).stop()
останавливает воспроизведение на всех каналах.
-
ceil(x)
Возвращает наименьшее целое число, большее или равноеx
. -
floor(x)
Возвращает наибольшее целое число, меньшее или равноеx
. -
sgn(x)
Возвращает 1, еслиx
положительно, 0, если оно равно нулю, и -1, если оно отрицательно. -
sqrt(x)
Возвращает квадратный корень изx
. -
sin(deg)
Возвращает синус градусаdeg
. -
cos(deg)
Возвращает косинус градусаdeg
. -
atan2(y, x)
Возвращает арктангенс углаy
/x
в градусах. -
rseed(seed: int)
Устанавливает затравку генератора случайных чисел. -
rndi(a, b)
Возвращает случайное целое число, большее или равноеa
и меньшее или равноеb
. -
rndf(a, b)
Возвращает случайную десятичную дробь, большую или равнуюa
и меньшую или равнуюb
. -
nseed(seed)
Устанавливает семя шума Перлина. -
noise(x, [y], [z])
Возвращает значение шума Перлина для указанных координат.
-
width
,height
Ширина и высота изображения -
data
Данные изображения (матрица 256x256) -
get(x, y)
Получить данные изображения в точке (x
,y
) -
set(x, y, data)
Установить данные изображения в точке (x
,y
) списком строк.
Пример:pyxel.image(0).set(10, 10, ["0123", "4567", "89ab", "cdef"])
-
load(x, y, filename)
Загрузить файл изображения (png/gif/jpeg) в координаты (x
,y
).
-
width
,height
Ширина и высота тайлмапа -
refimg
Банк изображений (0-2), на который ссылается карта тайлов -
set(x, y, data)
Установить данные карты тайлов в точке (x
,y
) списком строк.
Пример:pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
-
pget(x, y)
Получить тайл в координатах (x
,y
). Возвращаемое значение представляет собой кортеж(tile_x, tile_y)
. -
pset(x, y, tile)
Задать тайл в координатах (x
,y
). Тайл передаётся в виде кортежа(tile_x, tile_y)
.
-
notes
Список нот (0-127). Чем больше значение, тем выше нота. Значение 33 соответствует ноте «ля» второй октавы 'A2' (440Hz). Пауза задаётся значением -1. -
tones
Список тонов (0:Треугольник / 1:Квадрат / 2:Пульс / 3:Шум) -
volumes
Список громкости(0-7) -
effects
Список эффектов (0:Нет / 1:Слайд / 2:Вибрато / 3:Затихание) -
speed
Длительность воспроизведения. 1 — самая быстрая, чем выше значение, тем ниже скорость воспроизведения. При значении, равном 120 длительность воспроизведения одной ноты составляет 1 секунду. -
set(notes, tones, volumes, effects, speed)
Установить ноты, тоны, громкость и эффекты с помощью строк. Если длины строк для тона, громкости и эффектов короче строки для нот, они зацикливаются. -
set_notes(notes)
Установить ноты с помощью строки, составленной по форме 'CDEFGAB'+'#-'+'0123' или 'R'. Регистр и пробелы игнорируются.
Пример:pyxel.sound(0).set_notes("G2B-2D3R RF3F3F3")
-
set_tones(tones)
Установить тоны строкой, составленной из 'TSPN'. Регистр и пробелы игнорируются.
Пример:pyxel.sound(0).set_tones("TTSS PPPN")
-
set_volumes(volumes)
Установить громкость с помощью строки, составленной из '01234567'. Регистр и пробелы игнорируются.
Пример:pyxel.sound(0).set_volumes("7777 7531")
-
set_effects(effects)
Установить эффекты с помощью строки, составленной из 'NSVF'. Регистр и пробелы игнорируются.
Пример:pyxel.sound(0).set_effects("NFNF NVVS")
-
snds_list
Двумерный список звуков (0-63) с указанием количества каналов. -
set(snds0, snds1, snds2, snds3)
Установить список звуков (0-63) для всех каналов. Пустой список означает, что канал не используется для проигрывания.
Пример:pyxel.music(0).set([0, 1], [2, 3], [4], [])
Pyxel имеет «расширенные API», не упомянутые в этом документе, так как они «могут смутить пользователя» или «требуют специальных знаний для использования».
Если вы уверены в своих силах, используйте это в качестве подсказки!
Используйте трекер проблем для отправки отчётов о проблемах или предложений по улучшению/добавлению новых возможностей. Перед созданием новой задачи, убедитесь что схожие открытые задачи отсутствуют.
Ручное тестирование кода и написание отчетов о проблемах, предложений по улучшению в трекере проблем приветствуется!
Патчи/фиксы принимаются в форме запросов на слияние (pull-запрос, PR). Убедитесь, что проблема, к которой относится запрос на слияние изменений, открыта в трекере проблем.
Опубликованный pull-запрос считается опубликованным под лицензией MIT License.
Pyxel разпространяется по лицензией MIT License. Он может быть использован в проприетарном программном обеспечении при условии того, что все копии этого программного обеспечения или значительные его части содержат копию MIT License terms and the copyright notice.
Pyxel ищет спонсоров на GitHub Sponsors. Рассмотрите возможность спонсирования Pyxel для продолжения обслуживания и добавления функций. Спонсоры могут проконсультироваться о Pyxel в качестве преимущества. Подробнее см. Здесь.