[Английский | 中文 | Deutsch | Эспаньол | Français | Итальянский | 日本語 | 한국어 | Португас | Ррусский | Тюркч | Ukraїnsaka]
Pyxel - это ретро -игровой двигатель для Python.
Благодаря простым спецификациям, вдохновленным ретро-игровыми консолями, такими как отображение только 16 цветов и поддержка 4 звуковых каналов, вы можете легко наслаждаться созданием игр в стиле пикселя.
Разработка пикселя обусловлена отзывами пользователей. Пожалуйста, дайте Pyxel звезду на GitHub!
Технические характеристики и API Pyxel вдохновлены PICO-8 и TIC-80.
Pyxel является открытым исходным кодом по лицензии MIT и бесплатно. Давайте начнем делать ретро -игры с пикселем!
После установки Python3 (версия 3.8 или выше) запустите следующую команду:
pip install -U pyxel
При установке Python с помощью официального установщика обязательно проверьте опцию Add Python 3.x to PATH
чтобы включить команду pyxel
.
После установки Homebrew запустите следующие команды:
brew install pipx
pipx ensurepath
pipx install pyxel
Чтобы обновить пиксель после установки, запустите pipx upgrade pyxel
.
После установки пакета SDL2 ( libsdl2-dev
для Ubuntu), Python3 (версия 3.8 или выше) и python3-pip
, запустите следующую команду:
sudo pip3 install -U pyxel
Если предыдущая команда не удается, рассмотрите возможность построения пикселя из источника, следуя инструкциям в Makefile.
Веб -версия Pyxel не требует установки Python или Pyxel и работает на ПК, смартфонах и планшетах с поддерживаемыми веб -браузерами.
Для получения подробных инструкций, пожалуйста, обратитесь к этой странице.
После установки Pyxel вы можете скопировать примеры в текущую каталог со следующей командой:
pyxel copy_examples
Следующие примеры будут скопированы в ваш текущий каталог:
01_Hello_pyxel.py | Простейшее приложение | Демо | Код |
02_jump_game.py | Jump Game с файлом ресурсов 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 | Демонстрация APIS треугольника рисования | Демо | Код |
09_shoter.py | Снять игру с экранами | Демо | Код |
10_platformer.py | Игра с боковой прокручиванием с картой | Демо | Код |
11_offscreen.py | Захорочный рендеринг с классом изображений | Демо | Код |
12_perlin_noise.py | Перлин Анимация шума | Демо | Код |
13_bitmap_font.py | Нарисовать растровый шрифт | Демо | Код |
14_synthesizer.py | Синтезатор с использованием функций расширения звука | Демо | Код |
15_TILED_MAP_FILE.PY | Загрузка и рисование файла карты плитки (.tmx) | Демо | Код |
16_transform.py | Вращение и масштабирование изображения | Демо | Код |
99_flip_animation.py | Анимация с функцией FLIP (только платформы не-WEB) | Демо | Код |
30sec_of_daylight.pyxapp | 1 -й выигрышная игра Pyxel Jam от Адама | Демо | Код |
megaball.pyxapp | Arcade Ball Physics Game от Адама | Демо | Код |
8bit-bgm-gen.pyxapp | Генератор фоновой музыки от французского хлеба | Демо | Код |
Примеры могут быть выполнены со следующими командами:
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
, которая обрабатывает чертеж экрана.
В фактическом приложении рекомендуется обернуть код пикселя в классе, как показано ниже:
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
Alt(Option)+8
или A+B+X+Y+DL
на GamepadAlt(Option)+9
или A+B+X+Y+DR
на GamepadAlt(Option)+0
или A+B+X+Y+DU
on gamepadupdate
/ время draw
)Alt(Option)+Enter
или A+B+X+Y+DD
в GamepadShift+Alt(Option)+1/2/3
Shift+Alt(Option)+0
Редактор Pyxel может создавать изображения и звуки, используемые в приложении Pyxel.
Вы можете начать редактор Pyxel со следующей командой:
pyxel edit PYXEL_RESOURCE_FILE
Если существует указанный файл ресурса Pyxel (.pyxres), он будет загружен. Если его не существует, будет создан новый файл с указанным именем. Если файл ресурса опущен, будет создан новый файл с именем my_resource.pyxres
.
После начала редактора Pyxel вы можете переключиться на другой файл ресурсов, перетаскивая и сбросив его в редактор Pyxel.
Созданный файл ресурса может быть загружен с помощью функции load
.
Редактор Pyxel имеет следующие режимы редактирования.
Редактор изображений
Режим для редактирования изображения в каждом банке изображения .
Вы можете перетащить файл изображения (PNG/GIF/JPEG) в редактор изображений, чтобы загрузить изображение в выбранную в настоящее время банк изображения.
Редактор Tilemap
Режим для редактирования Tilemaps , который распоряжается изображениями из банков изображений в шаблоне плитки.
Перетащите файл TMX (файл с плиточной картой) в редактор TileMap, чтобы загрузить его слой в порядок чертежа, который соответствует выбранному в настоящее время номером TileMap.
Звуковой редактор
Режим редактирования звуков, используемых для мелодий и звуковых эффектов.
Музыкальный редактор
Режим редактирования музыки , в котором звуки расположены в порядке воспроизведения.
Изображения пикселя и тилирующие средства также могут быть созданы с помощью следующих методов:
Image.set
или функцию Tilemap.set
Image.load
Звуки пикселя также могут быть созданы с помощью следующего метода:
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()
Выйдите из приложения пикселя.
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
, и скрыть его, если 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
Список банков изображений (экземпляры класса изображений) (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)
Замените Color col1
на col2
при рисунке. Позвоните pal()
чтобы сбросить в начальную палитру.
dither(alpha)
Примените Dithering (псевдопрозрачность) при рисовании. Установите 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
и Color col
от ( x
, y
).
rectb(x, y, w, h, col)
Нарисуйте контур прямоугольника ширины w
, высоты h
и Color col
от ( x
, y
).
circ(x, y, r, col)
Нарисуйте круг радиуса r
и Color col
At ( x
, y
).
circb(x, y, r, col)
Нарисуйте контур круга радиуса r
и Color col
At ( x
, y
).
elli(x, y, w, h, col)
Нарисуйте эллипс ширины w
, высота h
и Color col
от ( x
, y
).
ellib(x, y, w, h, col)
Нарисуйте контур эллипса ширины w
, высоты h
и Color 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
) Tilemap 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
At ( x
, y
). sounds
Список звуков (экземпляры класса звука) (0-63)
Пример: pyxel.sounds[0].speed = 60
musics
Список музыки (экземпляры музыкального класса) (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])
Играть в Music msc
(0-7). Позиция начала воспроизведения может быть указана с помощью tick
(1 Tick = 1/120 секунд). Если loop
установлен на True
, выполняется воспроизведение петли.
stop([ch])
Остановите воспроизведение указанного канала ch
(0-3). Звоните stop()
чтобы остановить все каналы.
play_pos(ch)
Получите позицию воспроизведения звука Channel 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)
Верните Arctangent of y
/ x
в градусах.
rseed(seed)
Устанавливает семена генератора случайных чисел.
rndi(a, b)
Вернуть случайное целое число, больше или равно a
и меньше или равное b
.
rndf(a, b)
Вернуть случайное число с плавающей точкой, больше или равное a
и меньше, чем или равное b
nseed(seed)
Установите семена шума Перлина.
noise(x, [y], [z])
Вернуть значение шума Перлина для указанных координат.
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) AT ( x
, y
).
pget(x, y)
Получите цвет пикселя в ( x
, y
).
pset(x, y, col)
Нарисуйте пиксель с цветом col
At ( x
, y
).
width
, height
Ширина и высота тилевой карты
imgsrc
Банк изображений (0-2) ссылается Tilemap
set(x, y, data)
Установите Tilemap на ( x
, y
), используя список строк.
Пример: pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
load(x, y, filename, layer)
Загрузите слой в layer
порядка чертежа (0-) из файла TMX (файл Tiled Map) At ( x
, y
).
pget(x, y)
Получите плитку в ( x
, y
). Плитка представлена как кортеж (image_tx, image_ty)
.
pset(x, y, tile)
Нарисуйте tile
в ( x
, y
). Плитка представлена как кортеж (image_tx, image_ty)
.
notes
Список заметок (0-127). Чем выше число, тем выше шаг. Примечание 33
соответствует «A2» (440 Гц). Примечания отдыха представлены -1
.
tones
Список тонов (0: треугольник / 1: квадрат / 2: пульс / 3: шум)
volumes
Список объемов (0-7)
effects
Список эффектов (0: Нет / 1: Слайд / 2: Вибрато / 3: FADEOUT / 4: Half-Fadeout / 5: четверть-поделка)
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», который не упоминается в этой ссылке, поскольку он может сбить с толку пользователей или требовать специальных знаний для использования.
Если вы уверены в своих навыках, попробуйте создать удивительные работы, используя это в качестве руководства!
Используйте трекер выпуска, чтобы отправить отчеты об ошибках и запросы на функции или улучшение. Прежде чем отправить новую проблему, убедитесь, что нет похожих открытых проблем.
Любой, кто вручную проверяет код и сообщает об ошибках или предложениях для улучшений в трекере выпуска, очень приветствуется!
Патчи и исправления принимаются в форме запросов на вытягивание (PRS). Убедитесь, что проблема, которую адреса запроса, открыта в The Tracker.
Отправка запроса на привлечение подразумевает, что вы соглашаетесь лицензировать свой вклад по лицензии MIT.
Pyxel лицензирован по лицензии MIT. Он может быть использован в проприетарном программном обеспечении, при условии, что все копии программного обеспечения или его существенных частей включают копию условий лицензии MIT и уведомление об авторском праве.
Pyxel ищет спонсоров на спонсорах GitHub. Пожалуйста, рассмотрите возможность спонсирования Pyxel, чтобы поддержать его дальнейшее обслуживание и разработку функций. В качестве преимущества спонсоры могут консультироваться напрямую с разработчиком пикселя. Для получения более подробной информации, пожалуйста, посетите эту страницу.