Couldn't beat graphic bugs with sprite caching. Returned to old way. Need to create branch with sprite caching and try to finish it.

This commit is contained in:
shiva404
2026-02-16 00:30:17 +03:00
parent f679dde81f
commit 2e6e75866b
8 changed files with 55 additions and 33 deletions

View File

@@ -1,32 +1,44 @@
from common import dataclass, scale_image
from common import deepcopy, dataclass, field, scale_image, path_exists
@dataclass
class Object:
id: str
name: str
sprite_name: str
sprite_state: int = 0
sprite_scale: int = 1
sprite_cache: None = None
id: str
name: str
sprite_name: str
sprite_state: int = 0
#sprite_scale: int = 1
#sprite_cache: dict = field(default_factory = dict)
#sprite_cache_upd: int = 100
#
#def cache_sprite(self, sprites):
# if self.sprite_name not in self.sprite_cache:
# self.sprite_cache[self.sprite_name] = {}
# self.sprite_cache[self.sprite_name][self.sprite_state] = deepcopy(sprites[self.sprite_name][self.sprite_state])
#
#def scale_cached(self, draw_data):
# if self.sprite_scale != draw_data["scale"]:
# self.sprite_scale = draw_data["scale"]
# self.sprite_cache[self.sprite_name][self.sprite_state] = deepcopy(scale_image(draw_data["sprites"][self.sprite_name][self.sprite_state], draw_data["scale"]))
def draw(self, draw_data):
#if draw_data["global_counter"] > self.sprite_cache_upd:
# self.sprite_cache = {}
if draw_data["spr_up"] == 0:
if self.sprite_state == len(draw_data["sprites"][self.sprite_name]) - 1:
self.sprite_state = 0
else:
self.sprite_state += 1
if self.sprite_cache is None:
self.sprite_cache = draw_data["sprites"][self.sprite_name][self.sprite_state]
if self.sprite_scale != draw_data["scale"]:
self.sprite_scale = draw_data["scale"]
self.sprite_cache = scale_image(draw_data["sprites"][self.sprite_name][self.sprite_state], draw_data["scale"])
rect = self.sprite_cache.get_rect(center = (draw_data["x"] + draw_data["w"] /2, draw_data["y"] + draw_data["h"]/ 2))
else:
rect = self.sprite_cache.get_rect(center = (draw_data["x"] + draw_data["w"] /2, draw_data["y"] + draw_data["h"]/ 2))
#if path_exists(self.sprite_cache, [self.sprite_name, self.sprite_state]):
# self.scale_cached(draw_data)
#else:
# self.cache_sprite(draw_data["sprites"])
draw_data["screen"].blit(self.sprite_cache, rect)
sp = scale_image(draw_data["sprites"][self.sprite_name][self.sprite_state], draw_data["scale"])
rect = sp.get_rect(center = (draw_data["x"] + draw_data["w"] /2, draw_data["y"] + draw_data["h"]/ 2))
draw_data["screen"].blit(sp, rect)
@dataclass