{"id":27382032,"url":"https://github.com/neoxider/spritepro","last_synced_at":"2026-04-11T21:15:24.431Z","repository":{"id":286439729,"uuid":"961385719","full_name":"NeoXider/SpritePro","owner":"NeoXider","description":"High-level cross-platform 2D game framework for Python. Built on Pygame with scenes, camera, tweens, UI, physics, multiplayer, editor, and mobile/web workflows.","archived":false,"fork":false,"pushed_at":"2026-03-07T22:57:50.000Z","size":49257,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-07T23:20:36.678Z","etag":null,"topics":["game","library","pygame","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NeoXider.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-06T12:10:55.000Z","updated_at":"2026-03-07T22:57:36.000Z","dependencies_parsed_at":"2025-05-01T01:26:41.557Z","dependency_job_id":"259efd12-8866-4f60-8f11-dede091ad795","html_url":"https://github.com/NeoXider/SpritePro","commit_stats":null,"previous_names":["neoxider/pingpong","neoxider/spritepro"],"tags_count":51,"template":false,"template_full_name":null,"purl":"pkg:github/NeoXider/SpritePro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoXider%2FSpritePro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoXider%2FSpritePro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoXider%2FSpritePro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoXider%2FSpritePro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NeoXider","download_url":"https://codeload.github.com/NeoXider/SpritePro/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoXider%2FSpritePro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30238270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T23:52:25.683Z","status":"ssl_error","status_checked_at":"2026-03-07T23:52:25.373Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["game","library","pygame","python"],"created_at":"2025-04-13T15:17:08.327Z","updated_at":"2026-04-11T21:15:24.393Z","avatar_url":"https://github.com/NeoXider.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SpritePro\n\nВысокоуровневый 2D game framework на Python (поверх pygame). Desktop, web и mobile из одной кодовой базы.\n\n[![Python](https://img.shields.io/badge/Python-3.7+-blue.svg)](https://www.python.org/)\n[![License](https://img.shields.io/badge/License-Open%20Source-yellow.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/Version-3.8.0-green.svg)](CHANGELOG.md)\n\n![Demo](https://github.com/user-attachments/assets/db56e1fd-0db5-4353-945d-c4a31c6b9d7f)\n\n---\n\n## Установка\n\n```bash\npip install spritepro\n```\n\nДля mobile: `pip install \"spritepro[kivy]\"`\n\nШаблон проекта: `python -m spritePro.cli --create`\n\n### Обновление\n\n```bash\npip install --upgrade spritepro\n```\n\n---\n\n## Почему SpritePro\n\n| Обычно приходится | В SpritePro |\n|-------------------|-------------|\n| Ручной игровой цикл | `s.run(scene=...)` — сцена + auto-render |\n| Своя камера | Camera API, follow, zoom, shake |\n| UI с нуля | `Button`, `ToggleButton`, `TextSprite`, `Slider`, `TextInput`, `Layout` |\n| Физика отдельно | `pymunk`-интеграция, типы тел, коллизии |\n| Визуальный editor | Sprite Editor → JSON → `spawn_scene(...)` |\n| Сохранения парсить | `PlayerPrefs` → JSON |\n| Мультиплеер с нуля | TCP, лобби, ChatScene, синхронизация |\n| Mobile отдельно | `platform=\"kivy\"` — та же логика |\n| Скроллируемый UI | `ScrollView` + `ClipMask` — готовый клиппинг |\n\n**SpritePro = pygame + физика, Layout, ScrollView, ClipMask, редактор сцен, мультиплеер, UI.**\n\n---\n\n## Быстрый старт\n\n```python\nimport spritePro as s\n\nclass MainScene(s.Scene):\n    def __init__(self):\n        super().__init__()\n        self.player = s.Sprite(\"\", (50, 50), s.WH_C, speed=5, scene=self)\n\n    def update(self, dt):\n        self.player.handle_keyboard_input()\n\ns.run(scene=MainScene, size=(800, 600), title=\"My Game\")\n```\n\nВсё: окно, сцена, игровой цикл, управление.\n\n---\n\n## Что внутри\n\n- **Sprite** — базовый класс с движением, эффектами, иерархией parent-child\n- **UI**: Button, ToggleButton, Slider, TextInput, TextSprite, Layout (flex/grid/circle/line)\n- **ClipMask** — маска обрезки для viewport, инвентарей, чатов\n- **ScrollView** — скроллируемый контент с колёсиком и drag-and-drop\n- **Физика**: pymunk, DYNAMIC/STATIC/KINEMATIC тела, коллизии\n- **Анимации**: Tween, Fluent API (`DoMove`, `DoScale`, `SetEase`...)\n- **Частицы**: ParticleEmitter, шаблоны, пулы\n- **Мультиплеер**: TCP, лобби, ChatScene, синхронизация\n- **Audio**: звук и музыка\n- **Save/Load**: PlayerPrefs в JSON\n- **Sprite Editor**: визуальная сборка сцен → JSON\n\n---\n\n## Sprite Editor\n\nВизуальный редактор сцен с иерархией, инспектором, gizmo.\n\n\u003cimg width=\"800\" alt=\"Sprite Editor\" src=\"https://github.com/user-attachments/assets/01947bfe-d5e6-40cb-ba75-c03f2d4aeb9d\" /\u003e\n\n```\npython -m spritePro.cli --editor\n```\n\nСобираете сцену → сохраняете в JSON → загружаете в игре:\n\n```python\nrt = spawn_scene(\"level.json\", scene=self)\nplayer = rt.exact(\"player\").Sprite(speed=5)\n```\n\n---\n\n## Мультиплеерный чат\n\nГотовая сцена чата с маской обрезки и скроллом:\n\n```python\nfrom spritePro.readyScenes import ChatScene, ChatStyle\nimport spritePro as s\n\ns.run(scene=ChatScene, multiplayer=True, use_lobby=True, title=\"Chat\")\n```\n\n---\n\n## Сравнение\n\n| Функция | pygame | arcade | SpritePro |\n|---------|--------|--------|-----------|\n| Авто-рендер | ❌ | ✅ | ✅ |\n| Готовая камера | ❌ | ✅ | ✅ |\n| Физика (pymunk) | ❌ | ✅ | ✅ |\n| Layout (flex/grid) | ❌ | ❌ | ✅ |\n| Редактор сцен (JSON) | ❌ | ❌ | ✅ |\n| Маска обрезки / ScrollView | ❌ | ❌ | ✅ |\n| Мультиплеер (TCP) | ❌ | ❌ | ✅ |\n| PlayerPrefs | ❌ | ❌ | ✅ |\n\n---\n\n## Что создать\n\n- Платформеры, аркады, RPG\n- Пазлы, tower defense\n- Мультиплеерные игры\n- Мобильные игры (`platform=\"kivy\"`)\n\n---\n\n## Демо-игры\n\n```bash\npython -m spritePro.demoGames.physics_demo       # физика\npython -m spritePro.demoGames.fluent_tween_demo   # твины\npython -m spritePro.demoGames.layout_demo         # лейауты\npython -m spritePro.demoGames.local_multiplayer_demo --quick\n```\n\n[Все 54 демо](docs/demo_games/demo_games.md)\n\n---\n\n## Mobile и Web\n\n```python\ns.run(scene=MainScene, platform=\"kivy\")  # Android/iOS\n```\n\n```bash\npython -m spritePro.cli --android . --android-orientation portrait\n```\n\nWeb: [docs/builds/building_web.md](docs/builds/building_web.md)\n\n---\n\n## Документация\n\n| Что | Где |\n|-----|-----|\n| Полный индекс | [DOCUMENTATION_INDEX.md](DOCUMENTATION_INDEX.md) |\n| API Reference | [docs/API_REFERENCE.md](docs/API_REFERENCE.md) |\n| Для новичков | [docs/GETTING_STARTED.md](docs/GETTING_STARTED.md) |\n| Физика | [docs/core/physics_guide.md](docs/core/physics_guide.md) |\n| UI/Layout | [docs/ui/layout_ui.md](docs/ui/layout_ui.md) |\n| ClipMask | [docs/ui/clip_mask.md](docs/ui/clip_mask.md) |\n| Мультиплеер | [docs/systems/networking_guide.md](docs/systems/networking_guide.md) |\n| Sprite Editor | [docs/editor/sprite_editor.md](docs/editor/sprite_editor.md) |\n| Mobile | [docs/builds/mobile_kivy.md](docs/builds/mobile_kivy.md) |\n\n---\n\n## Вклад\n\n- [CONTRIBUTING.md](CONTRIBUTING.md) — как внести вклад\n- [ROADMAP.md](ROADMAP.md) — планы развития\n- [CHANGELOG.md](CHANGELOG.md) — история изменений\n\n---\n\n[📖 Документация](DOCUMENTATION_INDEX.md) · [💬 GitHub Issues](https://github.com/NeoXider/SpritePro/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneoxider%2Fspritepro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneoxider%2Fspritepro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneoxider%2Fspritepro/lists"}