[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский | Türkçe | Українська ]
Pyxel — это ретро-игровой движок для Python.
Спецификации вдохновлены ретро-игровыми консолями, такими как поддержка только 16 цветов и 4 звуковых канала, что позволяет легко наслаждаться созданием игр в стиле пиксельной графики.
Разработка Pyxel осуществляется на основе отзывов пользователей. Пожалуйста, поставьте Pyxel звезду на GitHub!
Спецификации и API Pyxel вдохновлены PICO-8 и TIC-80.
Pyxel является открытым программным обеспечением под MIT лицензией и бесплатен для использования. Давайте начнем создавать ретро-игры с Pyxel!
- Работает на Windows, Mac, Linux и Web
- Программирование на Python
- 16-цветная палитра
- 3 банка изображений размером 256x256
- 8 тайловых карт размером 256x256
- 4 канала с 64 настраиваемыми звуками
- 8 музыкальных треков, которые могут сочетать любые звуки
- Ввод с клавиатуры, мыши и игрового контроллера
- Инструменты для редактирования изображений и звуков
- Расширяемые пользователем цвета, каналы и банки
После установки Python3 (версии 3.8 или выше), выполните следующую команду:
pip install -U pyxel
При установке Python с помощью официального установщика убедитесь, что вы отметили опцию Add Python 3.x to PATH
, чтобы активировать команду pyxel
.
После установки Homebrew выполните следующие команды:
brew install pipx
pipx ensurepath
pipx install pyxel
Чтобы обновить Pyxel после установки, выполните pipx upgrade pyxel
.
После установки пакета SDL2 (libsdl2-dev
для Ubuntu), Python3 (версии 3.8 или выше) и python3-pip
выполните следующую команду:
sudo pip3 install -U pyxel
Если предыдущая команда не сработала, подумайте о сборке Pyxel из исходного кода, следуя инструкциям в Makefile.
Веб-версия Pyxel не требует установки Python или 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 | Shoot 'em up с переходами между экранами | Демонстрация | Код |
10_platformer.py | Горизонтальная платформенная игра с картой | Демонстрация | Код |
11_offscreen.py | Отрисовка вне экрана с классом Image | Демонстрация | Код |
12_perlin_noise.py | Анимация Перлин-шума | Демонстрация | Код |
13_bitmap_font.py | Рисование битмап-шрифта | Демонстрация | Код |
14_synthesizer.py | Синтезатор с использованием расширенных функций аудио | Демонстрация | Код |
15_tiled_map_file.py | Загрузка и отрисовка Tiled Map File (.tmx) | Демонстрация | Код |
16_transform.py | Поворот и масштабирование изображений | Демонстрация | Код |
99_flip_animation.py | Анимация с помощью функции flip (только для не веб-платформ) | Демонстрация | Код |
30sec_of_daylight.pyxapp | Победившая игра 1-го Pyxel Jam от Adam | Демонстрация | Код |
megaball.pyxapp | Аркадная игра с физикой мячей от Adam | Демонстрация | Код |
8bit-bgm-gen.pyxapp | Генератор фоновой музыки от frenchbread | Демонстрация | Код |
Примеры можно выполнить с помощью следующих команд:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30sec_of_daylight.pyxapp
В вашем Python-скрипте импортируйте модуль Pyxel, укажите размер окна с помощью функции 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()
Для создания простых графиков без анимации вы можете использовать функцию show
, чтобы упростить ваш код.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
Созданный скрипт можно выполнить с помощью команды python
:
python PYTHON_SCRIPT_FILE
Его также можно запустить с помощью команды pyxel run
:
pyxel run PYTHON_SCRIPT_FILE
Кроме того, команда pyxel watch
отслеживает изменения в указанном каталоге и автоматически перезапускает программу при обнаружении изменений:
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
Наблюдение за каталогом можно остановить, нажав Ctrl(Command)+C
.
Во время выполнения приложения Pyxel можно выполнить следующие специальные действия с клавишами:
Esc
Выйти из приложенияAlt(Option)+1
Сохранить снимок экрана на рабочий столAlt(Option)+2
Сбросить время начала записи видео с экранаAlt(Option)+3
Сохранить видео захвата экрана на рабочий стол (до 10 секунд)Alt(Option)+8
илиA+B+X+Y+DL
на геймпаде
Переключает масштаб экрана между максимальным и целочисленнымAlt(Option)+9
илиA+B+X+Y+DR
на геймпаде
Переключение между режимами экрана (Crisp/Smooth/Retro)Alt(Option)+0
илиA+B+X+Y+DU
на геймпаде
Переключить монитор производительности (FPS/update
время/draw
время)Alt(Option)+Enter
илиA+B+X+Y+DD
на геймпаде
Переключить полноэкранный режимShift+Alt(Option)+1/2/3
Сохранить банк изображений 0, 1 или 2 на рабочий столShift+Alt(Option)+0
Сохранить текущую цветовую палитру на рабочий стол
Pyxel Editor может создавать изображения и звуки, используемые в приложении Pyxel.
Вы можете запустить Pyxel Editor с помощью следующей команды:
pyxel edit PYXEL_RESOURCE_FILE
Если указанный файл ресурсов Pyxel (.pyxres) существует, он будет загружен. Если его нет, будет создан новый файл с указанным именем. Если файл ресурсов пропущен, будет создан новый файл с именем my_resource.pyxres
.
После запуска Pyxel Editor вы можете переключаться между файлами ресурсов, перетаскивая и бросая их на Pyxel Editor.
Созданный файл ресурсов можно загрузить с помощью функции load
.
Pyxel Editor имеет следующие режимы редактирования.
Редактор изображений
Режим для редактирования изображения в каждом банке изображений.
Вы можете перетаскивать и бросать файл изображения (PNG/GIF/JPEG) в редактор изображений, чтобы загрузить изображение в выбранный в данный момент банк изображений.
Редактор тайловых карт
Режим для редактирования тайловых карт, в которых изображения банков изображений располагаются в плиточном порядке.
Перетащите файл TMX (Tiled Map File) в редактор тайловых карт, чтобы загрузить его слой в порядке отрисовки, соответствующем текущему выбранному номеру тайловой карты.
Редактор звуков
Режим редактирования звуков, используемых для мелодий и звуковых эффектов.
Редактор музыки
Режим для редактирования музыки, в которых звуки расположены в порядке воспроизведения.
Изображения и тайловые карты Pyxel также можно создавать с помощью следующих методов:
- Создайте изображение из списка строк, используя функцию
Image.set
или функциюTilemap.set
- Загрузите файл изображения (PNG/GIF/JPEG) в палитру Pyxel с помощью функции
Image.load
Звуки Pyxel также можно создать с помощью следующего метода:
- Создайте звук из строк с помощью функции
Sound.set
или функцииMusic.set
Справьтесь к справочнику API для использования этих функций.
Pyxel поддерживает специальный формат файла для распространения приложений (файл приложения Pyxel), который работает на различных платформах.
Файл приложения Pyxel (.pyxapp) создается с помощью команды pyxel package
:
pyxel package APP_DIR STARTUP_SCRIPT_FILE
Если вам нужно включить ресурсы или дополнительные модули, разместите их в каталоге приложения.
Метаданные могут отображаться во время выполнения, если указать их в следующем формате в стартовом скрипте. Поля, кроме title
и author
, являются необязательными.
# title: Pyxel Platformer
# author: Takashi Kitao
# desc: A Pyxel platformer example
# site: https://github.com/kitao/pyxel
# license: MIT
# version: 1.0
Созданный файл приложения можно запустить с помощью команды pyxel play
:
pyxel play PYXEL_APP_FILE
Файл приложения Pyxel также можно преобразовать в исполняемый файл или HTML-файл с помощью команд pyxel app2exe
или pyxel app2html
.
-
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
. -
flip()
Обновление экрана на один кадр. Приложение завершится при нажатии клавишиEsc
. Эта функция недоступна в веб-версии. -
quit()
Завершение работы приложения Pyxel.
-
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
Загрузка файла ресурсов (.pyxres). Если опция установлена вTrue
, соответствующий ресурс будет исключен из загрузки. Если файл палитры (.pyxpal) с таким же именем существует в той же директории, что и файл ресурсов, цвета палитры также будут обновлены. Файл палитры содержит шестнадцатеричные значения для цветов отображения (например,1100FF
), разделенные новыми строками. Файл палитры также можно использовать для изменения цветов, отображаемых в Pyxel Editor. -
user_data_dir(vendor_name, app_name)
Возвращает каталог для сохранения пользовательских данных, созданный на основеvendor_name
иapp_name
. Если каталог не существует, он будет создан автоматически. Используется для сохранения рекордов, прогресса в игре и аналогичных данных.
Пример:print(pyxel.user_data_dir("Takashi Kitao", "Pyxel Shooter"))
-
mouse_x
,mouse_y
Текущие координаты курсора мыши -
mouse_wheel
Текущее значение колесика мыши -
btn(key)
ВозвращаетTrue
, если клавишаkey
нажата, иначе возвращаетFalse
. (Список определений клавиш) -
btnp(key, [hold], [repeat])
ВозвращаетTrue
, если клавишаkey
нажата в данном кадре, иначе возвращаетFalse
. Если указаныhold
иrepeat
, то после удержания клавишиkey
в течениеhold
кадров или более,True
будет возвращаться каждыеrepeat
кадров. -
btnr(key)
ВозвращаетTrue
, если клавишаkey
была отпущена в данном кадре, иначе возвращаетFalse
. -
mouse(visible)
Показывает курсор мыши, еслиvisible
равноTrue
, и скрывает его, еслиvisible
равноFalse
. Координаты курсора продолжают обновляться даже при его скрытии.
-
colors
Список цветов палитры отображения. Цвет отображения задается 24-битным числовым значением. Используйтеcolors.from_list
иcolors.to_list
для прямого назначения и извлечения списков Python.
Пример:old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
-
images
Список банков изображений (экземпляры класса Image) (0-2)
Пример:pyxel.images[0].load(0, 0, "title.png")
-
tilemaps
Список карт тайлов (экземпляры класса Tilemap) (0-7) -
clip(x, y, w, h)
Устанавливает область рисования на экране от координат (x
,y
) с ширинойw
и высотойh
. Вызовclip()
сбрасывает область рисования на весь экран. -
camera(x, y)
Изменяет координаты верхнего левого угла экрана на (x
,y
). Вызовcamera()
сбрасывает координаты верхнего левого угла на (0
,0
). -
pal(col1, col2)
Заменяет цветcol1
наcol2
при рисовании. Вызовpal()
сбрасывает палитру к исходному состоянию. -
dither(alpha)
Применяет дизеринг (псевдо-прозрачность) при рисовании. Установите значениеalpha
в диапазоне от0.0
до1.0
, где0.0
— это прозрачность, а1.0
— это непрозрачность. -
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
и цветомcol
от координат (x
,y
). -
rectb(x, y, w, h, col)
Рисует контур прямоугольника ширинойw
, высотойh
и цветомcol
от координат (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)
Заполняет область, соединенную с таким же цветом, как и в координатах (x
,y
), цветомcol
. -
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
Копирует регион размером (w
,h
) от координат (u
,v
) из банка изображенийimg
(0-2) в координаты (x
,y
). Если задано отрицательное значение дляw
и/илиh
, регион будет перевернут по горизонтали и/или вертикали. Если указанcolkey
, он будет считаться прозрачным цветом. Если заданыrotate
(в градусах),scale
(1.0 = 100%) или оба параметра, будут применены соответствующие преобразования.
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
Копирует регион размером (w
,h
) от координат (u
,v
) из карты тайловtm
(0-7) в координаты (x
,y
). Если задано отрицательное значение дляw
и/илиh
, регион будет перевернут по горизонтали и/или вертикали. Если указанcolkey
, он будет считаться прозрачным цветом. Если заданыrotate
(в градусах),scale
(1.0 = 100%) или оба параметра, будут применены соответствующие преобразования. Размер одного тайла составляет 8x8 пикселей и хранится в карте тайлов в виде кортежа(tile_x, tile_y)
.
text(x, y, s, col)
Рисует строкуs
цветаcol
в координатах (x
,y
).
-
sounds
Список звуков (экземпляры класса Sound) (0-63)
Пример:pyxel.sounds[0].speed = 60
-
musics
Список музыки (экземпляры класса Music) (0-7) -
play(ch, snd, [tick], [loop], [resume])
Воспроизводит звукsnd
(0-63) на каналеch
(0-3). Еслиsnd
является списком, звуки будут воспроизведены последовательно. Начальная позиция воспроизведения может быть указана с помощью параметраtick
(1 тик = 1/120 секунды). Если параметрloop
установлен в значениеTrue
, воспроизведение будет зациклено. Чтобы возобновить предыдущий звук после завершения воспроизведения, установитеresume
в значениеTrue
. -
playm(msc, [tick], [loop])
Воспроизводит музыкуmsc
(0-7). Начальная позиция воспроизведения может быть указана с помощью параметраtick
(1 тик = 1/120 секунды). Если параметрloop
установлен в значениеTrue
, воспроизведение будет зациклено. -
stop([ch])
Останавливает воспроизведение на указанном каналеch
(0-3). Вызов функцииstop()
останавливает воспроизведение на всех каналах. -
play_pos(ch)
Возвращает текущую позицию воспроизведения звука на каналеch
(0-3) в виде кортежа(sound_no, note_no)
. ВозвращаетNone
, если воспроизведение остановлено.
-
ceil(x)
Возвращает наименьшее целое число, большее или равноеx
. -
floor(x)
Возвращает наибольшее целое число, меньшее или равноеx
. -
sgn(x)
Возвращает1
, еслиx
положительное,0
, если равно0
, и-1
, если отрицательное. -
sqrt(x)
Возвращает квадратный корень числаx
. -
sin(deg)
Возвращает синус угла в градусахdeg
. -
cos(deg)
Возвращает косинус угла в градусахdeg
. -
atan2(y, x)
Возвращает арктангенс отношенияy
кx
в градусах. -
rseed(seed)
Устанавливает значение семени для генератора случайных чисел. -
rndi(a, b)
Возвращает случайное целое число отa
доb
включительно. -
rndf(a, b)
Возвращает случайное вещественное число отa
доb
включительно. -
nseed(seed)
Устанавливает значение семени для Perlin-шума. -
noise(x, [y], [z])
Возвращает значение Perlin-шума для указанных координат.
-
width
,height
Ширина и высота изображения -
set(x, y, data)
Устанавливает изображение в координатах (x
,y
) с использованием списка строк.
Пример:pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])
-
load(x, y, filename)
Загружает файл изображения (PNG/GIF/JPEG) в координаты (x
,y
). -
pget(x, y)
Получает цвет пикселя в координатах (x
,y
). -
pset(x, y, col)
Рисует пиксель цветаcol
в координатах (x
,y
).
-
width
,height
Ширина и высота карты тайлов -
imgsrc
Банк изображений (0-2), на который ссылается карта тайлов -
set(x, y, data)
Устанавливает карту тайлов в координатах (x
,y
) с использованием списка строк.
Пример:pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
-
load(x, y, filename, layer)
Загружает слой в порядке отрисовкиlayer
(0-) из файла TMX (Tiled Map File) в координаты (x
,y
). -
pget(x, y)
Получает тайл в координатах (x
,y
). Тайлы представлены в виде кортежа(tile_x, tile_y)
. -
pset(x, y, tile)
Рисуетtile
в координатах (x
,y
). Тайл представлен в виде кортежа(tile_x, tile_y)
.
-
notes
Список нот (0-127). Чем больше число, тем выше звук. Нота33
соответствует 'A2'(440Hz). Паузы обозначаются значением-1
. -
tones
Список тонов (0:Triangle / 1:Square / 2:Pulse / 3:Noise) -
volumes
Список громкостей (0-7) -
effects
Список эффектов (0:None / 1:Slide / 2:Vibrato / 3:FadeOut / 4:Half-FadeOut / 5:Quarter-FadeOut) -
speed
Скорость воспроизведения.1
— самая быстрая, и чем больше число, тем медленнее воспроизведение. При значении120
длительность одной ноты составляет 1 секунду. -
set(notes, tones, volumes, effects, speed)
Устанавливает ноты, тоны, громкости и эффекты с помощью строки. Если длина тонов, громкостей или эффектов меньше, чем у нот, они будут повторяться с начала. -
set_notes(notes)
Устанавливает ноты с помощью строки, состоящей из символов 'CDEFGAB'+'#-'+'01234' или 'R'. Регистр не имеет значения, а пробелы игнорируются.
Пример:pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
-
set_tones(tones)
Устанавливает тоны с помощью строки, состоящей из символов 'TSPN'. Регистр не имеет значения, а пробелы игнорируются.
Пример:pyxel.sounds[0].set_tones("TTSS PPPN")
-
set_volumes(volumes)
Устанавливает громкости с помощью строки, состоящей из символов '01234567'. Регистр не имеет значения, а пробелы игнорируются.
Пример:pyxel.sounds[0].set_volumes("7777 7531")
-
set_effects(effects)
Устанавливает эффекты с помощью строки, состоящей из символов 'NSVFHQ'. Регистр не имеет значения, а пробелы игнорируются.
Пример:pyxel.sounds[0].set_effects("NFNF NVVS")
-
seqs
Двумерный список звуков (0-63) для нескольких каналов -
set(seq0, seq1, seq2, ...)
Устанавливает списки звуков (0-63) для каждого канала. Если указан пустой список, этот канал не будет использоваться для воспроизведения.
Пример:pyxel.musics[0].set([0, 1], [], [3])
Pyxel включает в себя "Расширенный API", который не упоминается в данной справке, так как он может сбивать пользователей с толку или требовать специализированных знаний для использования.
Если вы уверены в своих навыках, попробуйте создать удивительные 作品, используя это в качестве руководства!
Используйте Трекер проблем для подачи отчетов об ошибках и запросов на функции или улучшения. Перед отправкой новой проблемы убедитесь, что нет похожих открытых вопросов.
Любой, кто вручную тестирует код и сообщает об ошибках или предлагает улучшения в Трекере проблем, очень приветствуется!
Патчи и исправления принимаются в форме запросов на изменение (PR). Убедитесь, что проблема, на которую ссылается запрос на изменение, открыта в Трекере проблем.
Подача запроса на изменение подразумевает, что вы соглашаетесь лицензировать свой вклад по Лицензии MIT.
Pyxel лицензируется по Лицензии MIT. Его можно использовать в проприетарном программном обеспечении, при условии, что все копии программного обеспечения или его значительные части содержат копию условий лицензии MIT и уведомление о авторских правах.
Pyxel ищет спонсоров на GitHub Sponsors. Пожалуйста, подумайте о том, чтобы стать спонсором Pyxel, чтобы поддержать его дальнейшую поддержку и развитие функций. В качестве преимущества спонсоры могут консультироваться непосредственно с разработчиком Pyxel. Для получения дополнительной информации посетите эту страницу.