0

So, I have a "MapClass.py" file, with inside a "Map" dataclass and a "MapManager" class :

import dataclasses
import pygame
import pytmx
import pyscroll

@dataclasses.dataclass
class Map:
    name: str
    walls: list[pygame.Rect]
    group: pyscroll.PyscrollGroup

class MapManager:

    def __init__(self, screen, player):
        self.maps = dict()
        self.current_map = "playtest"
        self.screen = screen
        self.player = player

        self.load_map("playtest")

    def load_map(self, name):
        tmx_data = pytmx.util_pygame.load_pygame(f"assets/maps/{name}.tmx")
        map_data = pyscroll.data.TiledMapData(tmx_data)
        map_layer = pyscroll.BufferedRenderer(
            map_data,
            self.screen.get_size(),
        )
        map_layer.zoom = 3

        walls = []
        for object in tmx_data.objects:
            if object.type == "collision":
                walls.append(pygame.Rect(object.x, object.y, object.width, object.height))

        group = pyscroll.PyscrollGroup(map_layer=map_layer, default_layer=5)
        group.add(self.player)

        map = Map(name, walls, group)
        self.maps[name] = map

    def get_currentmap(self): return self.maps[self.current_map]

    def get_group(self): return self.get_currentmap().group

    def get_walls(self): return self.get_currentmap().walls

But, when I launch it, it gives me this error :

  File "C:\Users\PC\Desktop\PYTHON\Jeux\A While Ago\MapClass.py", line 20, in __init__
    self.load_map("playtest")
  File "C:\Users\PC\Desktop\PYTHON\Jeux\A While Ago\MapClass.py", line 25, in load_map
    map_layer = pyscroll.BufferedRenderer(
  File "C:\Users\PC\Desktop\PYTHON\Jeux\A While Ago\venv\lib\site-packages\pyscroll\orthographic.py", line 73, in __init__
    self.set_size(size)
  File "C:\Users\PC\Desktop\PYTHON\Jeux\A While Ago\venv\lib\site-packages\pyscroll\orthographic.py", line 228, in set_size
    self._initialize_buffers(buffer_size)
  File "C:\Users\PC\Desktop\PYTHON\Jeux\A While Ago\venv\lib\site-packages\pyscroll\orthographic.py", line 550, in _initialize_buffers
    self.redraw_tiles(self._buffer)
  File "C:\Users\PC\Desktop\PYTHON\Jeux\A While Ago\venv\lib\site-packages\pyscroll\orthographic.py", line 242, in redraw_tiles
    self._flush_tile_queue(surface)
  File "C:\Users\PC\Desktop\PYTHON\Jeux\A While Ago\venv\lib\site-packages\pyscroll\orthographic.py", line 567, in _flush_tile_queue
    surface.blits(blit_list, doreturn=False)
  TypeError: Source objects must be a surface
  

I can't seem to understand why is this happening ? Is it me or the module ? Because I just can't seem to see the problem here..I think the problem is because of this :

map_layer = pyscroll.BufferedRenderer(
                map_data,
                self.screen.get_size(),
            )

(Line 25-28) Thanks a lot !

Cold Fire
  • 91
  • 5

0 Answers0