Skip to content

Latest commit

 

History

History
756 lines (542 loc) · 41 KB

README.uk.md

File metadata and controls

756 lines (542 loc) · 41 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.

  • 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, та приховує, якщо у 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) Список тайлмапів (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 пікселів, і він зберігається в тайлмапі у вигляді кортежу (image_tx, image_ty).

  • 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 tick = 1/120 секунди). Якщо параметр loop встановлено в значення True, звук програватиметься у циклі. Щоб відновити попередній звук після завершення відтворення, встановіть параметр resume у значення True.

  • playm(msc, [tick], [loop])
    Програє музичну композицію msc (0-7). Початкову позицію відтворення можна вказати за допомогою параметра tick (1 tick = 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, якщо він дорівнює нулю, і -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)
    Встановлює насіння для шуму Перліна.

  • noise(x, [y], [z])
    Повертає значення шуму Перліна для заданих координат.

Клас 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). Тайл представлений у вигляді кортежу (image_tx, image_ty).

  • pset(x, y, tile)
    Малює tile на позиції (x, y). Тайл представлений у вигляді кортежу (image_tx, image_ty).

Клас 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. Для отримання додаткової інформації відвідайте цю сторінку.