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.load_level("map")
self.map_id: int | str = "jays_map"
self.load_level(self.map_id)
self.scroll: list[float] = [0, 0]
@ -50,7 +51,7 @@ class Editor:
try:
self.tilemap.load(path="data/maps/" + str(map_id) + ".json")
except FileNotFoundError:
pass
print("error")
def run(self):
while self.running:
# Hintergrund löschen
@ -220,7 +221,7 @@ class Editor:
self.tilemap.autotile()
if event.key == pygame.K_o:
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):
self.shift: bool = True
if event.type == pygame.KEYUP:

29
game.py
View file

@ -25,7 +25,12 @@ class Game:
self.screen: pygame.Surface = pygame.display.set_mode(
(SCREEN_WIDTH, SCREEN_HEIGHT)
)
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)
)
@ -77,7 +82,7 @@ class Game:
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.screenshake = 0
@ -100,7 +105,9 @@ class Game:
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:
self.player.pos = spawner["pos"]
self.player.air_time = 0
@ -114,18 +121,17 @@ class Game:
self.scroll: list[float] = [0, 0]
self.transition: int = -30
def run(self) -> None:
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:
self.dead += 1
self.screenshake = max(16, self.screenshake)
if self.dead > 40:
self.load_level(map_id=self.level)
self.screenshake = max(0, self.screenshake - 1)
if not len(self.enemies):
@ -177,7 +183,7 @@ class Game:
self.tilemap, movement=(self.movement[1] - self.movement[0], 0)
)
self.player.render(surface=self.display, offset=render_scroll)
# [[x, y], direction, timer]
for projectile in self.projectiles.copy():
projectile[0][0] += projectile[1]
@ -237,6 +243,10 @@ class Game:
if kill:
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)
# print(int(self.player.pos[0]))
# print(int(self.player.pos[1]))
@ -301,7 +311,10 @@ class Game:
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()
self.clock.tick(60)