From 0e0bf1f84e7274d314d7776cf1fe613dfa212e36 Mon Sep 17 00:00:00 2001 From: shiva404 Date: Mon, 16 Feb 2026 02:46:28 +0300 Subject: [PATCH] Finally fixed sprite caching. For now it works only for one map, need to develop mapmanager and have a list of cached sprites for each map. --- __pycache__/common.cpython-314.pyc | Bin 1052 -> 607 bytes __pycache__/eb_engine.cpython-314.pyc | Bin 11996 -> 12955 bytes __pycache__/eb_objects.cpython-314.pyc | Bin 2603 -> 2516 bytes common.py | 6 -- eb_engine.py | 77 +++++++++++++++++-------- eb_objects.py | 26 +-------- main.py | 5 +- 7 files changed, 57 insertions(+), 57 deletions(-) diff --git a/__pycache__/common.cpython-314.pyc b/__pycache__/common.cpython-314.pyc index a187954f912599b860c0bba300e36121b7f65c14..e8dab0fa2b9077e0b5d83d136b19067859eee4f3 100644 GIT binary patch delta 161 zcmbQkai4`xn~#@^0SJtICS^u3PUMqd^q8pb!OE!2pvgM1%4TvO)9T3&81)4U5=%1T zQ!6ryONxv5fa*CW2Qpi-e+FsQD-s8C8G*Q121tBhW@Kc%&A@q^fg6bKGicmpki5;n`-O#_Q2?wP0H&QLsQ>@~ delta 579 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 KP5l9d`TPc!OtqT; delta 1027 zcmaJ<%}Z2K6u^Wch5WLR*t@G3PnRf zKY{P<>9t%~Uk$aU*1=mLv&5p~BuQPGWG+ieu9TErIjOixC&{p8a-3MKg;>%6!)ihX z>IZSv-K-2*C8MrBF*FrS4a`@@s1BwtqYg-Q`rj(wZj~SMf&b+FRznvtgWs^sR91g< z1WF6@OZHqYKcBUEfZkEjftdN>c8k+fxJQ4d9 zA|d0c@%((%=zX!c6-#W!5>?~Ey1X?!xj8&pHLQ)P%*L!;ox1ulnB{Ne4{8`BoF@KE z>7(uZy^_@<5HKl(hSa#)gxL;$M;*D?4Q2^{aoB0cC{9HH?xTe5{CSOBjDFC& z+~-Obb!CgeXeCb{aqM}w?ASsm<($F#e>4X%h9E9Hi(W*8KyGaCfSf$;+WAAIhOiDn zXzoi5fz-YD0V(}bIk&W!D`XFmi=!NZF!trpO_>3B63hAga>2oQJ2C=JM7#(`LrZK# z%xsWc0bled#178D)8qN&#qyG!a1v05J1sp1s7aL4&t$Ah#=cPh4m(MsH3G0L5f-Qk NH%+= self.scale_step: easy_map.scale -= self.scale_step + self.spr_scale -= self.scale_step + self.scale_sprites() if keys[pygame.K_ESCAPE]: running = False diff --git a/eb_objects.py b/eb_objects.py index 27d79b4..b75c1f4 100644 --- a/eb_objects.py +++ b/eb_objects.py @@ -1,4 +1,4 @@ -from common import deepcopy, dataclass, field, scale_image, path_exists +from common import deepcopy, dataclass, field, path_exists @dataclass class Object: @@ -6,37 +6,15 @@ class Object: 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 path_exists(self.sprite_cache, [self.sprite_name, self.sprite_state]): - # self.scale_cached(draw_data) - #else: - # self.cache_sprite(draw_data["sprites"]) - - sp = scale_image(draw_data["sprites"][self.sprite_name][self.sprite_state], draw_data["scale"]) + sp = draw_data["sprites"][self.sprite_name][self.sprite_state] 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) diff --git a/main.py b/main.py index 75f0176..1655dac 100644 --- a/main.py +++ b/main.py @@ -17,6 +17,7 @@ if __name__ == "__main__": # - кнопка отключить сетку # - строка ввода # - клик + # - вывод stdout на отдельную панель, полный экран, потом масштабирование всего под размер экрана # Поиск пути, очередь задач для существ # Редактор карты # Охотник -> деревня @@ -37,5 +38,5 @@ if __name__ == "__main__": #size = width, height = 640, 480 ## Use HWSURFACE and DOUBLEBUF flags #screen = pygame.display.set_mode(size, pygame.HWSURFACE | pygame.DOUBLEBUF) - # кэширование спрайтов - скалировать сразу все на уровне движка! - # изучить pypmler \ No newline at end of file + # изучить pypmler + # настроить логирование всего \ No newline at end of file