gamekit2d 0.2.0__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/MANIFEST.in +1 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/PKG-INFO +40 -10
- gamekit2d-0.2.0/gamekit2d.egg-info/PKG-INFO → gamekit2d-0.3.2/README.md +322 -316
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/TUTORIAL.md +13 -5
- gamekit2d-0.3.2/TUTORIAL_zh.md +800 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/__init__.py +4 -3
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/core/game.py +117 -79
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/fx/draw.py +11 -17
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/fx/particles.py +4 -4
- gamekit2d-0.3.2/gamekit/render/__init__.py +14 -0
- gamekit2d-0.3.2/gamekit/render/backend.py +703 -0
- gamekit2d-0.3.2/gamekit/render/surface.py +145 -0
- gamekit2d-0.3.2/gamekit/render/win32.py +267 -0
- gamekit2d-0.3.2/gamekit/render/window.py +202 -0
- gamekit2d-0.3.2/gamekit/sprites/group.py +103 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/sprites/sprite.py +41 -29
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/ui/text.py +8 -5
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/ui/widgets.py +10 -13
- gamekit2d-0.2.0/README.md → gamekit2d-0.3.2/gamekit2d.egg-info/PKG-INFO +346 -292
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit2d.egg-info/SOURCES.txt +7 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/pyproject.toml +4 -4
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/LICENSE +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/TUTORIAL.html +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/01_hello.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/02_pong.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/03_breakout.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/04_sprite_image.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/05_space_shooter.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/assets/coin1.png +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/assets/coin2.png +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/assets/player.png +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/assets/star.png +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/examples/make_assets.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/audio/__init__.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/audio/sound.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/core/__init__.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/core/keys.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/core/scene.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/fx/__init__.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/physics/__init__.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/physics/collision.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/sprites/__init__.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/sprites/animation.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/sprites/image.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/ui/__init__.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/utils/__init__.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/utils/color.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit/utils/vector.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit2d.egg-info/dependency_links.txt +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/gamekit2d.egg-info/top_level.txt +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/setup.cfg +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/tests/run_selftest.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/tests/test_collision.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/tests/test_draw.py +0 -0
- {gamekit2d-0.2.0 → gamekit2d-0.3.2}/tests/test_utils.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gamekit2d
|
|
3
|
-
Version: 0.2
|
|
4
|
-
Summary: A tiny zero-dependency 2D game library (standard library only, tkinter + winsound). A simpler pygame.
|
|
3
|
+
Version: 0.3.2
|
|
4
|
+
Summary: A tiny zero-dependency 2D game library (standard library only, self-made GDI renderer + tkinter + winsound). A simpler pygame.
|
|
5
5
|
Author: gamekit contributors
|
|
6
6
|
License-Expression: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/
|
|
8
|
-
Project-URL: Repository, https://github.com/
|
|
7
|
+
Project-URL: Homepage, https://github.com/yuleemoon/gamekit2d
|
|
8
|
+
Project-URL: Repository, https://github.com/yuleemoon/gamekit2d
|
|
9
9
|
Keywords: game,2d,game-engine,tkinter,zero-dependency,pygame-alternative
|
|
10
10
|
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
@@ -28,10 +28,11 @@ Dynamic: license-file
|
|
|
28
28
|
|
|
29
29
|
gamekit 的目标是:**让任何人用最少的代码,最快做出一个能玩的 2D 小游戏**。不需要懂窗口、事件循环、坐标系等底层细节,一个文件就能跑起一个完整游戏。
|
|
30
30
|
|
|
31
|
-
- 🚫 **零依赖**:只用 Python 标准库(`tkinter`
|
|
31
|
+
- 🚫 **零依赖**:只用 Python 标准库(`tkinter` / 自研 GDI 渲染、`winsound` 音频),装好 Python 就能跑
|
|
32
|
+
- ⚡ **可插拔渲染后端**:默认 Windows 上用**自研 GDI 内核**(同场景实测约为 tkinter 的 2~3.5 倍),其他平台自动回落 tkinter;一行 `Game(backend=...)` 切换
|
|
32
33
|
- ✨ **极简 API**:`Game` 一个类搞定窗口、输入、精灵、碰撞、物理、音效、粒子、场景
|
|
33
34
|
- 🎮 **功能齐全**:精灵 / 图像 / 动画 / 碰撞 / 重力 / 音效 / 文字 / 按钮 / 进度条 / 粒子 / 场景切换
|
|
34
|
-
- 🪶 **轻量**:纯 Python
|
|
35
|
+
- 🪶 **轻量**:纯 Python 实现(ctypes 直接调系统 GDI),核心约 2000 行,结构清晰可读
|
|
35
36
|
|
|
36
37
|
---
|
|
37
38
|
|
|
@@ -42,7 +43,7 @@ gamekit 的目标是:**让任何人用最少的代码,最快做出一个能
|
|
|
42
43
|
把 `gamekit/` 目录放到你的项目旁边,然后直接 `import gamekit`:
|
|
43
44
|
|
|
44
45
|
```bash
|
|
45
|
-
git clone https://github.com/
|
|
46
|
+
git clone https://github.com/yuleemoon/gamekit2d.git
|
|
46
47
|
cd gamekit
|
|
47
48
|
python examples/01_hello.py # 直接运行示例
|
|
48
49
|
```
|
|
@@ -50,11 +51,39 @@ python examples/01_hello.py # 直接运行示例
|
|
|
50
51
|
### 方式二:pip 安装
|
|
51
52
|
|
|
52
53
|
```bash
|
|
53
|
-
pip install gamekit
|
|
54
|
+
pip install gamekit2d # 安装名是 gamekit2d,import 仍是 import gamekit
|
|
54
55
|
```
|
|
55
56
|
|
|
56
57
|
> 无论哪种方式都**不需要安装任何第三方包**。运行环境只需 Python 3.9+(Windows / Linux / macOS 均可,音频仅 Windows 支持,其他平台自动静默降级)。
|
|
57
58
|
|
|
59
|
+
### 渲染后端
|
|
60
|
+
|
|
61
|
+
`Game` 默认 `backend="auto"`:Windows 上自动使用**自研 GDI 高性能内核**(原生窗口 + BitBlt 双缓冲 + 矩形精灵 Surface 缓存,同尺寸同色精灵共享像素、每帧一次位块传送),其他平台自动回落 tkinter。也可显式指定:
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
Game(..., backend="gdi") # 强制 GDI(仅 Windows)
|
|
65
|
+
Game(..., backend="tk") # 强制 tkinter(跨平台保底)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
同一套游戏代码不用改,切后端只改这一个参数。
|
|
69
|
+
|
|
70
|
+
### 场景分组与脏矩形
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from gamekit import Group
|
|
74
|
+
|
|
75
|
+
enemies = Group(*[game.sprite(color="red", x=i*40, y=80, width=28, height=28)
|
|
76
|
+
for i in range(10)])
|
|
77
|
+
|
|
78
|
+
@game.on_update
|
|
79
|
+
def wave(dt):
|
|
80
|
+
enemies.move(0, 50 * dt) # 整组移动
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`Group` 是一组精灵的轻量容器:整组移动 / 隐藏 / 删除,不用自己写循环。精灵仍由 Game 统一渲染,Group 只做批量管理。
|
|
84
|
+
|
|
85
|
+
`Game(..., dirty=True)` 开启**脏矩形局部更新**:不整屏清屏,只把上一帧真正移动过的精灵旧位置刷回背景色。实测:在"少量动态对象 + 静态背景"场景(菜单、UI、几个移动元素)与整屏清屏基本持平;**大量精灵同时移动时建议保持 `dirty=False`**(局部恢复比整屏 `memmove` 清屏更贵)。仅 GDI 后端有效。
|
|
86
|
+
|
|
58
87
|
---
|
|
59
88
|
|
|
60
89
|
## 快速上手
|
|
@@ -273,13 +302,14 @@ Key.A ~ Key.Z / Key.F1 ~ Key.F12
|
|
|
273
302
|
gamekit/
|
|
274
303
|
├── gamekit/
|
|
275
304
|
│ ├── core/ # 核心引擎:Game 主类、场景、事件、按键
|
|
305
|
+
│ ├── render/ # 自研渲染层:Surface/Window(GDI 内核)+ 后端接口
|
|
276
306
|
│ ├── sprites/ # 精灵、图像处理(自研缩放/旋转)、帧动画
|
|
277
307
|
│ ├── physics/ # 碰撞检测(矩形/圆形)
|
|
278
308
|
│ ├── audio/ # WAV 音效(winsound)
|
|
279
309
|
│ ├── ui/ # 文字、按钮、进度条
|
|
280
310
|
│ ├── fx/ # 粒子系统
|
|
281
311
|
│ └── utils/ # 颜色、向量工具
|
|
282
|
-
├── examples/ #
|
|
312
|
+
├── examples/ # 5 个完整示例 + 素材生成脚本
|
|
283
313
|
├── tests/ # 单元测试 + GUI 冒烟测试
|
|
284
314
|
├── pyproject.toml # 发布配置(零依赖)
|
|
285
315
|
└── README.md
|
|
@@ -296,7 +326,7 @@ gamekit/
|
|
|
296
326
|
| 音频 | 仅 `.wav`,仅 Windows,一次一个 | 标准库 `winsound` 的能力边界;其他平台自动静默 |
|
|
297
327
|
| 图像格式 | PNG / GIF / PPM / BMP | 不支持 JPG(Tk 无解码器),可用 PNG 替代 |
|
|
298
328
|
| 旋转/缩放 | 最近邻算法,大图较慢 | 适合 200×200 以下的小图,在加载时调用一次 |
|
|
299
|
-
| 渲染性能 |
|
|
329
|
+
| 渲染性能 | GDI 后端约是 tkinter 的 2~3.5 倍;1000 个矩形精灵实测约 60~120 FPS(受机器负载影响) | 同场景实测(32×32 彩色矩形、640×400):GDI 100 个 ≈ 300+ FPS、500 个 ≈ 100~190 FPS、2000 个 ≈ 60 FPS;tkinter 用于跨平台保底。基准见 `learn_pygame/bench_compare.py` |
|
|
300
330
|
|
|
301
331
|
---
|
|
302
332
|
|