feat: Transparente Anzeige hinzugefügt; Hintergrund wird jetzt auf einem separaten Surface gerendert

This commit is contained in:
Benjamin 2026-06-24 17:18:52 +02:00
parent 6766f5aadb
commit 0de7cea306
2 changed files with 25 additions and 11 deletions

View file

@ -32,7 +32,8 @@ class Editor:
self.tilemap: Tilemap = Tilemap(game=self, tile_size=16) self.tilemap: Tilemap = Tilemap(game=self, tile_size=16)
self.load_level("map") self.map_id: int | str = "jays_map"
self.load_level(self.map_id)
self.scroll: list[float] = [0, 0] self.scroll: list[float] = [0, 0]
@ -50,7 +51,7 @@ class Editor:
try: try:
self.tilemap.load(path="data/maps/" + str(map_id) + ".json") self.tilemap.load(path="data/maps/" + str(map_id) + ".json")
except FileNotFoundError: except FileNotFoundError:
pass print("error")
def run(self): def run(self):
while self.running: while self.running:
# Hintergrund löschen # Hintergrund löschen
@ -220,7 +221,7 @@ class Editor:
self.tilemap.autotile() self.tilemap.autotile()
if event.key == pygame.K_o: if event.key == pygame.K_o:
print("Map saved.") print("Map saved.")
self.tilemap.save(path="map.json") self.tilemap.save(path="data/maps/" + str(self.map_id) + ".json")
if event.key in (pygame.K_LSHIFT, pygame.K_RSHIFT): if event.key in (pygame.K_LSHIFT, pygame.K_RSHIFT):
self.shift: bool = True self.shift: bool = True
if event.type == pygame.KEYUP: if event.type == pygame.KEYUP:

29
game.py
View file

@ -25,7 +25,12 @@ class Game:
self.screen: pygame.Surface = pygame.display.set_mode( self.screen: pygame.Surface = pygame.display.set_mode(
(SCREEN_WIDTH, SCREEN_HEIGHT) (SCREEN_WIDTH, SCREEN_HEIGHT)
) )
self.display: pygame.Surface = pygame.Surface( self.display: pygame.Surface = pygame.Surface(
(self.screen.get_width() // 2, self.screen.get_height() // 2),
pygame.SRCALPHA,
)
self.display_2: pygame.Surface = pygame.Surface(
(self.screen.get_width() // 2, self.screen.get_height() // 2) (self.screen.get_width() // 2, self.screen.get_height() // 2)
) )
@ -77,7 +82,7 @@ class Game:
self.tilemap: Tilemap = Tilemap(game=self, tile_size=16) self.tilemap: Tilemap = Tilemap(game=self, tile_size=16)
self.level: int = 0 self.level: int | str = "jays_map"
self.load_level(map_id=self.level) self.load_level(map_id=self.level)
self.screenshake = 0 self.screenshake = 0
@ -100,7 +105,9 @@ class Game:
pygame.Rect(4 + tree["pos"][0], 4 + tree["pos"][1], 23, 13) pygame.Rect(4 + tree["pos"][0], 4 + tree["pos"][1], 23, 13)
) )
for spawner in self.tilemap.extract(id_pairs=[("spawners", 0), ("spawners", 1)]): for spawner in self.tilemap.extract(
id_pairs=[("spawners", 0), ("spawners", 1)]
):
if spawner["variant"] == 0: if spawner["variant"] == 0:
self.player.pos = spawner["pos"] self.player.pos = spawner["pos"]
self.player.air_time = 0 self.player.air_time = 0
@ -114,18 +121,17 @@ class Game:
self.scroll: list[float] = [0, 0] self.scroll: list[float] = [0, 0]
self.transition: int = -30 self.transition: int = -30
def run(self) -> None: def run(self) -> None:
while self.running: while self.running:
self.display.blit(self.assets["background"], (0, 0)) self.display.fill((0, 0, 0, 0))
self.display_2.blit(self.assets["background"], (0, 0))
if self.dead: if self.dead:
self.dead += 1 self.dead += 1
self.screenshake = max(16, self.screenshake) self.screenshake = max(16, self.screenshake)
if self.dead > 40: if self.dead > 40:
self.load_level(map_id=self.level) self.load_level(map_id=self.level)
self.screenshake = max(0, self.screenshake - 1) self.screenshake = max(0, self.screenshake - 1)
if not len(self.enemies): if not len(self.enemies):
@ -177,7 +183,7 @@ class Game:
self.tilemap, movement=(self.movement[1] - self.movement[0], 0) self.tilemap, movement=(self.movement[1] - self.movement[0], 0)
) )
self.player.render(surface=self.display, offset=render_scroll) self.player.render(surface=self.display, offset=render_scroll)
# [[x, y], direction, timer] # [[x, y], direction, timer]
for projectile in self.projectiles.copy(): for projectile in self.projectiles.copy():
projectile[0][0] += projectile[1] projectile[0][0] += projectile[1]
@ -237,6 +243,10 @@ class Game:
if kill: if kill:
self.sparks.remove(spark) self.sparks.remove(spark)
display_mask = pygame.mask.from_surface(self.display)
display_sillhouette = display_mask.to_surface(setcolor=(0, 0, 0, 180), unsetcolor=(0, 0, 0, 0))
self.display_2.blit(display_sillhouette, (0, 0))
# self.player.boost(self.boost) # self.player.boost(self.boost)
# print(int(self.player.pos[0])) # print(int(self.player.pos[0]))
# print(int(self.player.pos[1])) # print(int(self.player.pos[1]))
@ -301,7 +311,10 @@ class Game:
random.random() * self.screenshake - self.screenshake / 2, random.random() * self.screenshake - self.screenshake / 2,
) )
self.screen.blit(pygame.transform.scale(self.display, self.screen.get_size()), screenshake_offset) self.screen.blit(
pygame.transform.scale(self.display_2, self.screen.get_size()),
screenshake_offset,
)
pygame.display.update() pygame.display.update()
self.clock.tick(60) self.clock.tick(60)