Быстрый старт для новичков: установка, первая игра, базовые концепции
pip install spriteproДля mobile/Kivy-режима:
pip install "spritepro[kivy]"git clone https://github.com/NeoXider/SpritePro.git
cd SpritePro
pip install -e .Создайте файл my_game.py:
import spritePro as s
class MainScene(s.Scene):
def __init__(self):
super().__init__()
# Создаём спрайт игрока в центре экрана
self.player = s.Sprite("", (50, 50), s.WH_C, speed=5, scene=self)
def update(self, dt):
# Обработка ввода (WASD/стрелки)
self.player.handle_keyboard_input()
# Запуск игры
s.run(scene=MainScene, size=(800, 600), title="Моя первая игра")Запустите:
python my_game.pyГотово! У вас есть окно, сцена, игровой цикл и управление. 🎮
Для быстрого старта с правильной структурой:
python -m spritePro.cli --createИли в отдельную папку:
python -m spritePro.cli --create MyGameЧто создаст:
main.py— точка входаconfig.py— настройки и пути к ассетамgame_events.py— базовые события через EventBusscenes/main_scene.py— главная сценаscenes/second_scene.py— вторая сцена (заготовка)scenes/main_level.json— стартовый уровень из редактораassets/audio/,assets/images/— папки для ассетов
Сцена — изолированный игровой мир с собственным циклом обновления. Каждая сцена имеет:
__init__()— инициализация объектовupdate(dt)— вызывается каждый кадрon_enter(context)— вызывается при входе в сценуon_exit()— вызывается при выходе из сцены
Переключение между сценами:
s.restart_scene() # Перезапуск текущей сцены
s.set_scene_by_name("menu") # Переключение на сцену "menu"Спрайт — базовый визуальный объект. Основные возможности:
- Позиционирование:
set_position(x, y) - Трансформации:
set_scale(),set_rotation(),set_color() - Движение:
handle_keyboard_input(),move_towards() - Коллизии:
collides_with(),collide_mask()
Создание спрайта:
# Пустой прямоугольник
sprite = s.Sprite("", (100, 100), (50, 30), scene=scene)
# С изображением
sprite = s.Sprite("player.png", (100, 100), (50, 30), scene=scene)
# С физикой
s.add_physics(sprite, shape=s.PhysicsShape.BOX)SpritePro автоматически управляет игровым циклом:
update(dt)— вызывается ~60 раз в секунду (dt = delta time в секундах)draw(screen)— отрисовка спрайтов- Обработка событий (keyboard, mouse)
Ваш код:
def update(self, dt):
# Логика игры (вызывается каждый кадр)
self.player.handle_keyboard_input()
if s.input.was_pressed(s.pygame.K_SPACE):
print("Прыжок!")class MainScene(s.Scene):
def __init__(self):
super().__init__()
# Игрок в центре экрана, размер 50x30, скорость 5
self.player = s.Sprite("", (50, 50), s.WH_C, speed=5, scene=self)def update(self, dt):
# WASD / стрелки
self.player.handle_keyboard_input()def __init__(self):
super().__init__()
self.player = s.Sprite("", (50, 50), s.WH_C, speed=5, scene=self)
# Камера следит за игроком
s.set_camera_follow(self.player)def __init__(self):
super().__init__()
self.player = s.Sprite("", (50, 50), s.WH_C, speed=5, scene=self)
# Платформы (статическая физика)
self.platform1 = s.Sprite("", (200, 20), (200, 400), scene=self)
self.platform2 = s.Sprite("", (200, 20), (500, 350), scene=self)
# Добавляем физику
s.add_static_physics(self.platform1)
s.add_static_physics(self.platform2)
# Камера следит за игроком
s.set_camera_follow(self.player)s.run(scene=MainScene, size=(800, 600), title="Platformer", fill_color=(135, 206, 235))Полный код:
import spritePro as s
class PlatformerScene(s.Scene):
def __init__(self):
super().__init__()
self.player = s.Sprite("", (50, 50), s.WH_C, speed=5, scene=self)
# Платформы
self.platforms = [
s.Sprite("", (200, 20), (200, 400), scene=self),
s.Sprite("", (200, 20), (500, 350), scene=self),
]
# Физика платформ
for p in self.platforms:
s.add_static_physics(p)
# Камера
s.set_camera_follow(self.player)
def update(self, dt):
self.player.handle_keyboard_input()
s.run(scene=PlatformerScene, size=(800, 600), title="Platformer", fill_color=(135, 206, 235))# Физика
python -m spritePro.demoGames.physics_demo
# Твины (анимации)
python -m spritePro.demoGames.fluent_tween_demo
# Лейауты
python -m spritePro.demoGames.layout_demo
# Мультиплеер
python -m spritePro.demoGames.local_multiplayer_demo --quick# Preview разных экранов
python -m spritePro.cli --preview main.py --platform kivy --screen phone-portrait
python -m spritePro.cli --preview main.py --platform kivy --screen tablet-landscape
python -m spritePro.cli --list-screen-presets# Сборка APK
python -m spritePro.cli --android .
python -m spritePro.cli --android . --android-mode release
python -m spritePro.cli --android . --android-orientation portrait- API Reference — полный справочник всех классов и функций
- Physics Guide — физика pymunk + редактор сцен
- UI & Layouts — UI компоненты и автолейауты
- Animation & Tweens — анимации и плавные переходы
- Полный индекс — все статьи одним списком
- Изучите код демо-игр в
spritePro/demoGames/ - Попробуйте изменить параметры в туториале
- Создайте свой проект через
python -m spritePro.cli --create
- GitHub Issues — вопросы и баги
- GitHub Discussions — обсуждения
- multiplayer_course — курс по сетевой игре
Q: Как загрузить изображение?
A: s.Sprite("path/to/image.png", ...) или через Builder: s.sprite("image.png").build()
Q: Как добавить физику?
A: s.add_physics(sprite, shape=s.PhysicsShape.BOX) для динамического тела
s.add_static_physics(sprite) для статической (стена/пол)
Q: Как сделать анимацию?
A: Используйте твины: sprite.DoMove((100, 200)).SetDuration(1.0).Start()
Q: Как сохранить данные?
A: prefs = s.PlayerPrefs("save.json") → prefs.set_int("score", 100)
Q: Как запустить mobile-версию?
A: s.run(scene=MainScene, platform="kivy")
🎮 Готовы к следующему шагу?
Перейдите к API Reference или изучите демо-игры!