Мощный игровой фреймворк, который превращает создание 2D игр из сложной задачи в удовольствие!
В SpritePro появился встроенный редактор спрайтов в стиле Unity: создавайте сцены визуально, расставляйте объекты мышью и сохраняйте в JSON для использования в игре.
python -m spritePro.cli --editorили коротко:
python -m spritePro.cli -e- Добавлять объекты — кнопки Rect, Circle, Ellipse для примитивов; Add или перетаскивание файлов для изображений.
- Редактировать — инструменты Move (G), Rotate (R), Scale (T); перемещение, вращение, масштаб мышью.
- Настраивать — Inspector справа: имя, позиция, размер, цвет, слой (Sorting Order).
- Сохранять — Ctrl+S или кнопка Save; сцена сохраняется в JSON.
- Загружать в игру —
spawn_scene("scene.json", scene=...)и получение объектов по имени:rt.exact("player").Sprite(speed=5),rt.exact("button").to_button(...).
Подробнее: документация редактора.
SpritePro — высокоуровневая библиотека для 2D игр на Python (поверх Pygame): автоматическая отрисовка, камера, ввод, слои. Плюс физика (pymunk), Layout (flex, сетка, круг, линия), редактор сцен (JSON + spawn_scene), мультиплеер (TCP, лобби, курс), UI (кнопки, текст, бары), частицы, сохранения (PlayerPrefs), твины и анимации — без лишнего кода.
- ⚡ Почему SpritePro? · 🌟 Особенности
- 🚀 Быстрый старт — установка, первая игра, шаблон
--create - 💡 Примеры возможностей · 🎮 Что можно создать?
- 📖 Документация — главная карта и ссылки по разделам
- 🎬 Демо-игры · 📦 Что внутри?
- 🎯 Ключевые преимущества · 🆚 SpritePro vs pygame
- 🚀 Начните прямо сейчас! · 🤝 Сообщество · 📄 Лицензия
# С pygame нужно писать ВСЁ самому:
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
sprite = pygame.sprite.Sprite()
# ... 50+ строк кода для базовой игры ...# Всё работает из коробки!
import spritePro as s
s.get_screen((800, 600), "My Awesome Game")
player = s.Sprite("player.png", (50, 50), s.WH_C, speed=5)
while True:
s.update(fill_color=(20, 20, 30))
player.handle_keyboard_input() # Готово! Движение работает!Это всё! Игра готова за 5 строк кода! 🎉
| С чистым pygame | Со SpritePro |
|---|---|
| ❌ Ручная отрисовка каждого спрайта | ✅ Спрайты рисуются сами, один мир — один цикл |
| ❌ Ручная камера и viewport | ✅ Камера из коробки, слежение одной строкой |
| ❌ Своя обработка клавиш и мыши | ✅ InputState (was_pressed, оси), EventBus |
| ❌ Ручные слои и порядок отрисовки | ✅ sorting_order, группы, LayeredUpdates |
| ❌ mixer.Sound и своя логика громкости | ✅ AudioManager: load, play, музыка, громкость |
| ❌ Парсинг JSON/файлов для сохранений | ✅ PlayerPrefs: set_int/get_int, set_float, … |
| ❌ Циклы и спрайты для частиц | ✅ ParticleEmitter + ParticleConfig, emit() |
| ❌ Свой движок или интеграция Box2D/pymunk | ✅ Физика на pymunk: add_physics, типы тел, коллизии |
| ❌ Ручная расстановка UI (x, y каждого элемента) | ✅ Layout: flex, сетка, круг, линия; ScrollView |
| ❌ Кодом расставлять объекты на уровне | ✅ Редактор сцен (JSON), spawn_scene, объекты по имени |
- ✅ Автоматическая отрисовка - просто создайте спрайт, он сам отрисуется
- ✅ Умная камера - слежение за объектами одной строкой
- ✅ Простая физика - столкновения, гравитация, движение из коробки
- ✅ Система частиц - красивые эффекты за 3 строки кода
- ✅ UI компоненты - кнопки, переключатели, текст готовы к использованию
- ✅ Анимации и твининг - плавные переходы без головной боли
- ✅ Аудио менеджер - управление звуком и музыкой централизованно
- ✅ Система сохранений - PlayerPrefs как в Unity!
- ✅ Якоря позиционирования - размещайте объекты точно где нужно
- ✅ Автолейаут (Layout) - flex, сетка, круг, линия для автоматического размещения дочерних спрайтов (документация)
- ✅ ScrollView — скроллируемая область для контента (лейаут), колёсико и перетаскивание мышью, опциональная маска (клиппинг по viewport)
- ✅ Готовые сцены (readyScenes) — подключаемые сцены: ChatScene (мультиплеерный чат с историей, скроллом и маской) и ChatStyle для настройки оформления
- ✅ Мультиплеер — сетевые игры: TCP relay, контекст (send/poll/send_every), EventBus; быстрый старт через
s.networking.run(). Готовое лобби (run(use_lobby=True)): один экран — имя, хост/клиент, порт, IP, список игроков, кнопки «В игру» и «Готов»; по нажатию «В игру» игра запускается у обоих. Подробно: Networking — лобби. Мини-курс в папкеmultiplayer_course/— 10 уроков от обмена сообщениями до готовой мини-игры.
Это самый простой и быстрый способ начать работу со SpritePro.
pip install spriteproВсе зависимости, включая pygame, будут установлены автоматически.
Чтобы обновить SpritePro до последней версии, используйте команду:
pip install --upgrade spriteproЭтот способ подходит, если вы хотите внести свой вклад в разработку или использовать самую последнюю, еще не опубликованную версию.
-
Клонируйте репозиторий:
git clone https://github.com/NeoXider/SpritePro.git
-
Перейдите в папку проекта:
cd SpritePro -
(Опционально) Установите в режиме редактирования:
pip install -e .Это позволит вам изменять код библиотеки и сразу видеть изменения в своих проектах.
import spritePro as s
s.get_screen((800, 600), "My Game")
player = s.Sprite("", (50, 50), s.WH_C, speed=5)
while True:
s.update(fill_color=(20, 20, 30))
player.handle_keyboard_input() # Готово! Игра работает!Вот и всё! У вас уже есть игра с управлением, отрисовкой и игровым циклом! 🎮
python -m spritePro.cli --createСоздаст main.py в текущей папке и структуру assets/audio, assets/images, scenes.
Также создаст scenes/level.json (формат Sprite Editor): сцена по умолчанию загрузит уровень из JSON и возьмёт player по имени.
Если хотите создать проект в отдельной папке, укажите путь:
python -m spritePro.cli --create MyGameimport spritePro as s
screen = s.get_screen((800, 600), "Platformer")
# Игрок с автоматическим движением
player = s.Sprite("player.png", (50, 50), (100, 300), speed=5)
# Платформы
platforms = [
s.Sprite("", (200, 20), (200, 400)),
s.Sprite("", (200, 20), (500, 350)),
]
# Камера следует за игроком
s.set_camera_follow(player)
# Частицы при движении
emitter = s.ParticleEmitter(s.ParticleConfig(
amount=10,
speed_range=(50, 100),
lifetime_range=(0.5, 1.0)
))
# Настраиваем столкновения один раз (не в цикле!)
player.set_collision_targets(platforms)
while True:
s.update(fill_color=(135, 206, 235)) # Небо
player.handle_keyboard_input() # Столкновения обрабатываются автоматически!
# Частицы
if player.velocity.length() > 0:
emitter.emit(player.rect.center)Результат: Полноценная платформер-игра с физикой, камерой и эффектами!
# Получаем готовый AudioManager
audio = s.audio_manager
# Вариант 1: Загружаем и сохраняем для многократного использования
jump_sound = audio.load_sound("jump", "sounds/jump.mp3")
jump_sound.play() # Автоматически применяются настройки громкости!
# Вариант 2: Прямое воспроизведение по пути (без загрузки!)
audio.play_sound("sounds/jump.mp3") # Автоматически загрузит и воспроизведет!
audio.play_sound("sounds/coin.wav", volume=0.8) # С кастомной громкостью
# Вариант 3: В одну строку для быстрого воспроизведения
audio.load_sound("explosion", "sounds/explosion.mp3").play()
# Музыка
audio.play_music("music/background.mp3", volume=0.5) # Сразу с нужной громкостью!
# Или установить громкость отдельно
audio.set_music_volume(0.5) # 50% громкостиНикаких pygame.mixer.Sound(), никаких ручных настроек - всё работает!
# Кнопка с автоматической анимацией
button = s.Button(
"", (200, 50), (400, 300),
"Начать игру",
on_click=lambda: print("Игра началась!")
)
# Переключатель музыки
music_toggle = s.ToggleButton(
"", (150, 40), (100, 50),
text_on="Музыка: ВКЛ",
text_off="Музыка: ВЫКЛ",
on_toggle=lambda is_on: s.audio_manager.set_music_enabled(is_on)
)
# Текст с якорем (автоматическое позиционирование!)
score_text = s.TextSprite(
"Score: 0", 36, (255, 255, 255),
(s.WH.x - 10, 10),
anchor=s.Anchor.TOP_RIGHT # Прижмется к правому краю!
)Всё работает автоматически - наведение, клики, анимации!
import pygame
import spritePro as s
s.get_screen((800, 600), "Input")
def on_quit(event):
print("Quit")
s.events.on("quit", on_quit)
while True:
s.update()
if s.input.was_pressed(pygame.K_SPACE):
print("Space pressed")Если нужен доступ к сырым событиям pygame — используйте s.pygame_events.
import spritePro as s
class MainScene(s.Scene):
def on_enter(self, context):
pass
s.get_screen((800, 600), "Scenes")
manager = s.get_context().scene_manager
manager.add_scene("main", MainScene())
s.register_scene_factory("main", MainScene)
s.set_scene_by_name("main")
# Перезапуск сцены
s.restart_scene() # текущая сцена
s.restart_scene("main") # по имени# Создаем эффект взрыва
explosion = s.ParticleEmitter(s.ParticleConfig(
amount=50,
speed_range=(100, 300),
angle_range=(0, 360),
lifetime_range=(0.5, 1.5),
gravity=s.Vector2(0, 200)
))
# Взрыв при клике
explosion.emit(mouse_pos) # Всё! 50 частиц летят во все стороны!3 строки кода = красивый эффект взрыва!
# Создаем PlayerPrefs
prefs = s.PlayerPrefs("save.json")
# Сохраняем что угодно
prefs.set_float("score", 1250.5)
prefs.set_int("level", 5)
prefs.set_string("player_name", "Hero")
prefs.set_vector2("player_pos", (400, 300))
# Загружаем
score = prefs.get_float("score", 0)
level = prefs.get_int("level", 1)
name = prefs.get_string("player_name", "Player")
pos = prefs.get_vector2("player_pos", (0, 0))
# Всё автоматически сохраняется в JSON!Никаких ручных парсеров, никаких сложных форматов!
- Автоматические столкновения
- Камера следует за игроком
- Готовые частицы для эффектов
- Система здоровья из коробки
- Таймеры для событий
- Готовые UI элементы
- Система сохранений
- Инвентарь (через спрайты)
- Диалоги (через TextSprite)
- Интерактивные элементы
- Анимации переходов
- Система состояний
- Пути для врагов (через move_towards)
- Система частиц для эффектов
- UI для интерфейса
- Встроенная сетевая подсистема (NetServer / NetClient, relay)
- Синхронизация позиций, состояний, событий (ready, start, счёт)
- Мини-курс в папке
multiplayer_course/: уроки 1–10 с примерами, практикой и решениями
| Функция | pygame | arcade | SpritePro |
|---|---|---|---|
| Автоматическая отрисовка | ❌ | ✅ | ✅ |
| Готовая камера | ❌ | ✅ | ✅ |
| Физика (2D) | ❌ | ✅ | ✅ pymunk, типы тел, коллизии |
| Layout (flex, сетка, круг) | ❌ | ❌ | ✅ |
| Редактор сцен (JSON) | ❌ | ❌ | ✅ |
| Мультиплеер (TCP, лобби) | ❌ | ❌ | ✅ |
| Система частиц | ❌ | ❌ | ✅ |
| AudioManager | ❌ | ❌ | ✅ |
| PlayerPrefs | ❌ | ❌ | ✅ |
| Якоря позиционирования | ❌ | ❌ | ✅ |
| Простота использования | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
SpritePro = pygame + физика, Layout, редактор сцен, мультиплеер и всё остальное для игры.
- Создайте прототип игры за минуты, а не часы
- Меньше кода = меньше багов
- Больше времени на геймплей, меньше на инфраструктуру
- Автоматические анимации кнопок
- Плавные переходы (tweening)
- Готовые эффекты частиц
- Цветовые эффекты
- Полный доступ к pygame под капотом
- Расширяемая архитектура
- Можно использовать как pygame, так и высокоуровневые функции
- Подробные примеры для каждого компонента
- Демо-игры с исходным кодом
- Понятные API
Все с открытым исходным кодом. Полный список — DOCUMENTATION_INDEX.md → Демо.
| Демо | Описание |
|---|---|
| Ping Pong | Игра с меню, звуком, физикой |
| Physics Demo | Гравитация, отскок, платформы, статика/кинематика |
| demoGames/ | Сцена из редактора: level.json, spawn_scene, get_physics, платформер. python demoGames/main.py |
| Fireworks | Частицы |
| Tween | Плавные анимации |
| Мультиплеер | local_multiplayer_demo, курс multiplayer_course |
Запуск из корня репозитория: python -m spritePro.demoGames.physics_demo или python demoGames/main.py.
- Sprite — базовый класс с движением и визуальными эффектами
- Button, ToggleButton — кнопки и переключатели с анимациями
- TextSprite — текст с якорями
- Bar — полосы прогресса (HP, опыт)
- pymunk — мир тел, типы DYNAMIC/STATIC/KINEMATIC, формы (PhysicsShape), гравитация, коллизии. Тело из сцены:
s.get_physics(sprite). docs/physics.md
- Layout — автолейаут: flex, сетка, круг, линия; контейнер — спрайт или rect. docs/layout.md
- ScrollView — скроллируемая область (колёсико, перетаскивание)
- Slider, TextInput, Pages — слайдеры, поля ввода, страницы
- Animation — анимации по кадрам
- Tween — плавные переходы; Fluent API:
sprite.DoMove(...).SetEase(...). docs/tween.md - Timer, Health — таймеры и здоровье
- ParticleEmitter — частицы (конфиг, emit)
- NetServer / NetClient, relay, контекст (send, poll, send_every)
- Лобби — экран с именем, хост/клиент, порт, «В игру». docs/networking.md
- Курс: multiplayer_course/ — 10 уроков
- AudioManager — звук и музыка
- PlayerPrefs — сохранения в JSON
- Camera — камера и слежение за объектом
- Builder — fluent API для спрайтов и частиц
- Sprite Editor — сцены в стиле Unity: Move/Rotate/Scale, Hierarchy, Inspector, JSON
- В игре:
spawn_scene("level.json", ...), объекты по имени, физика из сцены. docs/sprite_editor.md - Запуск:
python -m spritePro.cli --editorили-e
Главная карта — DOCUMENTATION_INDEX.md: всё по полочкам (старт, основы, физика, редактор, UI, демо, порядок изучения).
| Раздел | Куда смотреть |
|---|---|
| Старт | Установка, Первая игра, Шаблон проекта |
| Обзор | docs/OVERVIEW.md — Layout, физика, Builder, мультиплеер кратко |
| Физика | docs/physics.md — pymunk, типы тел, PhysicsShape, сцена из редактора; docs/physics_issues.md — нюансы |
| Редактор сцен | docs/sprite_editor.md — редактор, spawn_scene, get_physics из сцены |
| Демо | DOCUMENTATION_INDEX.md → Демо; сцена из редактора: demoGames/ |
| Сеть | docs/networking.md; курс: multiplayer_course/ |
| Вся документация | docs/README.md — навигация по docs |
import spritePro as s
screen = s.get_screen((800, 600), "My Game")
# Аудио
audio = s.audio_manager
audio.load_sound("click", "sounds/click.mp3")
click_sound = audio.get_sound("click")
audio.play_music("music/bg.mp3")
# Сохранения
prefs = s.PlayerPrefs("save.json")
high_score = prefs.get_int("high_score", 0)
# UI
start_button = s.Button(
"", (200, 50), s.WH_C,
"Начать игру",
on_click=lambda: click_sound.play()
)
# Игрок
player = s.Sprite("player.png", (50, 50), (100, 300), speed=5)
# Камера
s.set_camera_follow(player)
while True:
s.update(fill_color=(20, 20, 30))
player.handle_keyboard_input()
# Сохраняем рекорд
if score > high_score:
prefs.set_int("high_score", score)Всё работает вместе из коробки!
# 100+ строк для базовой игры
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
sprites = pygame.sprite.Group()
# ... обработка событий ...
# ... ручная отрисовка ...
# ... ручное управление камерой ...
# ... ручная система слоев ...
# ... и так далее ...# 10 строк для той же игры!
import spritePro as s
s.get_screen((800, 600), "Game")
player = s.Sprite("player.png", (50, 50), s.WH_C, speed=5)
while True:
s.update()
player.handle_keyboard_input()В 10 раз меньше кода! 🚀
- Автоматическая отрисовка - создали спрайт? Он уже рисуется!
- Автоматическое обновление - Tween, Animation, Timer обновляются сами
- Автоматическая камера - слежение за объектами одной строкой
- Автоматические столкновения - физика из коробки
- Пульсация, мерцание, волны для кнопок
- Плавные переходы (easing)
- Система частиц
- Цветовые эффекты
- Якоря позиционирования (как в Unity!)
- PlayerPrefs (как в Unity!)
- AudioManager (централизованное управление звуком)
- Готовые компоненты (Bar, TextSprite, Button)
pip install spriteproЗатем — Ваша первая игра (5 строк) выше или шаблон: python -m spritePro.cli --create.
- ⚡ В 10 раз меньше кода чем с чистым pygame
- 🚀 В 5 раз быстрее разработка прототипов
- 🎯 100% готовых компонентов для типичных задач
- 📚 Полная документация с примерами
- 🎮 30+ демо-игр с исходным кодом
- 💬 Вопросы? Откройте Issue
- 🐛 Нашли баг? Сообщите
- 💡 Есть идея? Предложите
- ⭐ Понравилось? Поставьте звезду!
Открытый исходный код. Используйте свободно в своих проектах!
SpritePro - это не просто библиотека. Это ваш путь от идеи к игре!
📖 Документация • 🎮 Демо-игры • 💬 Вопросы
Создано с ❤️ для разработчиков игр
