Skip to content

Latest commit

 

History

History
755 lines (541 loc) · 42.2 KB

README.ru.md

File metadata and controls

755 lines (541 loc) · 42.2 KB

Downloads GitHub Repo stars GitHub forks GitHub Sponsors

ko-fi

[ 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 музыкальных треков, которые могут сочетать любые звуки
  • Ввод с клавиатуры, мыши и игрового контроллера
  • Инструменты для редактирования изображений и звуков
  • Расширяемые пользователем цвета, каналы и банки

Цветовая палитра

Как установить

Windows

После установки Python3 (версии 3.8 или выше), выполните следующую команду:

pip install -U pyxel

При установке Python с помощью официального установщика убедитесь, что вы отметили опцию Add Python 3.x to PATH, чтобы активировать команду pyxel.

Mac

После установки Homebrew выполните следующие команды:

brew install pipx
pipx ensurepath
pipx install pyxel

Чтобы обновить Pyxel после установки, выполните pipx upgrade pyxel.

Linux

После установки пакета SDL2 (libsdl2-dev для Ubuntu), Python3 (версии 3.8 или выше) и python3-pip выполните следующую команду:

sudo pip3 install -U pyxel

Если предыдущая команда не сработала, подумайте о сборке Pyxel из исходного кода, следуя инструкциям в Makefile.

Web

Веб-версия 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.

Справочник по API

Система

  • 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-шума для указанных координат.

Класс Image

  • 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).

Класс Tilemap

  • 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).

Класс Sound

  • 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")

Класс Music

  • seqs
    Двумерный список звуков (0-63) для нескольких каналов

  • set(seq0, seq1, seq2, ...)
    Устанавливает списки звуков (0-63) для каждого канала. Если указан пустой список, этот канал не будет использоваться для воспроизведения.
    Пример: pyxel.musics[0].set([0, 1], [], [3])

Расширенный API

Pyxel включает в себя "Расширенный API", который не упоминается в данной справке, так как он может сбивать пользователей с толку или требовать специализированных знаний для использования.

Если вы уверены в своих навыках, попробуйте создать удивительные 作品, используя это в качестве руководства!

Как внести вклад

Подавать проблемы

Используйте Трекер проблем для подачи отчетов об ошибках и запросов на функции или улучшения. Перед отправкой новой проблемы убедитесь, что нет похожих открытых вопросов.

Функциональное тестирование

Любой, кто вручную тестирует код и сообщает об ошибках или предлагает улучшения в Трекере проблем, очень приветствуется!

Подавать запросы на изменение

Патчи и исправления принимаются в форме запросов на изменение (PR). Убедитесь, что проблема, на которую ссылается запрос на изменение, открыта в Трекере проблем.

Подача запроса на изменение подразумевает, что вы соглашаетесь лицензировать свой вклад по Лицензии MIT.

Дополнительная информация

Лицензия

Pyxel лицензируется по Лицензии MIT. Его можно использовать в проприетарном программном обеспечении, при условии, что все копии программного обеспечения или его значительные части содержат копию условий лицензии MIT и уведомление о авторских правах.

Поиск спонсоров

Pyxel ищет спонсоров на GitHub Sponsors. Пожалуйста, подумайте о том, чтобы стать спонсором Pyxel, чтобы поддержать его дальнейшую поддержку и развитие функций. В качестве преимущества спонсоры могут консультироваться непосредственно с разработчиком Pyxel. Для получения дополнительной информации посетите эту страницу.