Aggiungi supporto per la creazione e il disegno di texture di sfondo nel gioco
This commit is contained in:
+18
-4
@@ -40,7 +40,15 @@ class GameWindow:
|
||||
self.audio_devs = []
|
||||
for i in range(5):
|
||||
self.audio_devs.append((True, sdl2.SDL_OpenAudioDevice(None, 0, SDL_AudioSpec(freq=22050, aformat=sdl2.AUDIO_U8, channels=1, samples=2048), None, 0)))
|
||||
|
||||
|
||||
def create_texture(self, tiles: list):
|
||||
bg_surface = sdl2.SDL_CreateRGBSurface(0, self.width, self.height, 32, 0, 0, 0, 0)
|
||||
for tile in tiles:
|
||||
dstrect = sdl2.SDL_Rect(tile[1], tile[2], self.cell_size, self.cell_size)
|
||||
sdl2.SDL_BlitSurface(tile[0], None, bg_surface, dstrect)
|
||||
bg_texture = self.factory.from_surface(bg_surface)
|
||||
sdl2.SDL_FreeSurface(bg_surface)
|
||||
return bg_texture
|
||||
|
||||
def load_joystick(self):
|
||||
sdl2.SDL_Init(sdl2.SDL_INIT_JOYSTICK)
|
||||
@@ -53,7 +61,7 @@ class GameWindow:
|
||||
fonts.update({i: sdl2.ext.FontManager(font_path=font_file, size=i)})
|
||||
return fonts
|
||||
|
||||
def load_image(self, path, transparent_color=None):
|
||||
def load_image(self, path, transparent_color=None, surface=False):
|
||||
image_path = os.path.join("assets", path)
|
||||
image = Image.open(image_path)
|
||||
if transparent_color:
|
||||
@@ -67,6 +75,8 @@ class GameWindow:
|
||||
new_data.append(item)
|
||||
image.putdata(new_data)
|
||||
scale = self.cell_size // 20
|
||||
if surface:
|
||||
return sdl2.ext.pillow_to_surface(image.resize((image.width * scale, image.height * scale), Image.NEAREST))
|
||||
image = image.resize((image.width * scale, image.height * scale), Image.NEAREST)
|
||||
return self.factory.from_surface(sdl2.ext.pillow_to_surface(image))
|
||||
|
||||
@@ -77,6 +87,9 @@ class GameWindow:
|
||||
else:
|
||||
sprite.position = position
|
||||
self.renderer.copy(sprite, dstrect=sprite.position)
|
||||
|
||||
def draw_background(self, bg_texture):
|
||||
self.renderer.copy(bg_texture, dstrect=sdl2.SDL_Rect(0, 0, self.width, self.height))
|
||||
|
||||
def draw_image(self, x, y, sprite, tag, anchor="nw"):
|
||||
if not self.is_in_visible_area(x, y):
|
||||
@@ -144,7 +157,7 @@ class GameWindow:
|
||||
sdl2.SDL_SetWindowFullscreen(self.window.window, flag)
|
||||
|
||||
def is_in_visible_area(self, x, y):
|
||||
return -self.w_offset <= x <= self.width - self.w_offset and -self.h_offset <= y <= self.height - self.h_offset
|
||||
return -self.w_offset -self.cell_size <= x <= self.width - self.w_offset and -self.h_offset -self.cell_size <= y <= self.height - self.h_offset
|
||||
|
||||
def mainloop(self, **kwargs):
|
||||
while self.running:
|
||||
@@ -177,6 +190,7 @@ class GameWindow:
|
||||
|
||||
|
||||
# Disegna qui gli sprite
|
||||
#sdl2.SDL_RenderSetClipRect(self.renderer.sdlrenderer, sdl2.SDL_Rect(self.w_offset, self.h_offset, self.target_size[0], self.target_size[1]))
|
||||
self.renderer.present()
|
||||
self.performance = (sdl2.SDL_GetPerformanceCounter() - performance_start) / sdl2.SDL_GetPerformanceFrequency() * 1000
|
||||
if self.performance < self.delay:
|
||||
@@ -250,5 +264,5 @@ class GameWindow:
|
||||
if not dev[0]:
|
||||
sdl2.SDL_PauseAudioDevice(dev[1], 1)
|
||||
sdl2.SDL_ClearQueuedAudio(dev[1])
|
||||
dev[0] = True
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user