Skip to content

Commit 80b2e0a

Browse files
committed
v3.9.2
1 parent aa7bbb0 commit 80b2e0a

3 files changed

Lines changed: 27 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
Формат основан на [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
и этот проект придерживается [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [3.9.2]
9+
10+
### Fixed
11+
- 🐛 **Физика: утечка тел при перезапуске сцены**`Sprite.kill()` теперь удаляет все привязанные `PhysicsBody` из `PhysicsWorld` и `pymunk.Space`. Раньше при перезапуске сцены спрайты удалялись, но их физические тела оставались в мире, вызывая призрачные коллизии и ошибки обращения к мёртвым спрайтам.
12+
13+
### Changed
14+
- 🔧 **Версия библиотеки** — релиз обновлён до `3.9.2`.
15+
16+
---
17+
818
## [3.9.0]
919

1020
### Fixed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "spritepro"
7-
version = "3.9.1"
7+
version = "3.9.2"
88
authors = [
99
{ name="NeoXider", email="neoxider@gmail.com" },
1010
]

spritePro/sprite.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,9 +1169,23 @@ def set_polyline(
11691169
def kill(self) -> None:
11701170
"""Удаляет спрайт из игры и освобождает все связанные ресурсы.
11711171
1172-
Отменяет регистрацию спрайта, удаляет все дочерние спрайты и вызывает
1173-
родительский метод kill().
1172+
Отменяет регистрацию спрайта, удаляет физические тела из мира физики,
1173+
удаляет все дочерние спрайты и вызывает родительский метод kill().
11741174
"""
1175+
# Удаляем физические тела из мира физики
1176+
bodies = getattr(self, "_physics_bodies", None)
1177+
if bodies:
1178+
try:
1179+
world = spritePro.get_physics_world()
1180+
for body in list(bodies):
1181+
try:
1182+
world.remove(body)
1183+
except Exception:
1184+
pass
1185+
except Exception:
1186+
pass
1187+
bodies.clear()
1188+
11751189
if self._game_registered:
11761190
spritePro.unregister_sprite(self)
11771191
self._game_registered = False

0 commit comments

Comments
 (0)