Partage
  • Partager sur Facebook
  • Partager sur Twitter

TypeError avec pygame problème de surface

    22 mai 2022 à 20:28:40

    Bonjour, je suis en python et je ne comprend pas pour quoi mon self.screen ne marche pas ?
    L'image que vous voyez en dessous représente l'érreur, et les pages de code en dessous, tous mon code.
    Le problème agis lorsque je lance le programme.


    Voici mes lignes de code


    main.py

    import pygame
    
    from game import Game
    
    if __name__ == '__main__':
        pygame.init()
        game = Game()
        game.run()


    game.py

    import pygame
    import pytmx
    import pyscroll
    
    from lumbertown.player import Player
    
    
    class Game:
    
        def __init__(self):
            # frst fenêtre
            self.screen = pygame.display.set_mode((500, 500))
            pygame.display.set_caption("LumberTown")
    
            # charger la carte
            tmx_data = pytmx.util_pygame.load_pygame('lumbertown/map/carte.tmx')
            map_data = pyscroll.data.TiledMapData(tmx_data)
            map_layer = pyscroll.orthographic.BufferedRenderer(map_data, self.screen.get_size())
            map_layer.zoom = 2
    
            # genérer le joueur
            player_position = tmx_data.get_object_by_name('player')
            self.player = Player(player_position.x, player_position.y)
    
            # dessiner le groupe de camque.
            self.group = pyscroll.PyscrollGroup(map_layer=map_layer, default_layer=3)
            self.group.add(self.player)
    
        def handle_input(self):
            pressed = pygame.key.get_pressed()
    
            if pressed[pygame.K_UP]:
                self.player.move_up()
                self.player.change_animation('up')
            elif pressed[pygame.K_DOWN]:
                self.player.move_down()
                self.player.change_animation('down')
            elif pressed[pygame.K_RIGHT]:
                self.player.move_rig()
                self.player.change_animation('right')
            elif pressed[pygame.K_LEFT]:
                self.player.move_left()
                self.player.change_animation('left')
    
        def run(self):
    
            clock = pygame.time.Clock()
    
            # var light game
            running = True
    
            # boucle tant que la condition = True
            while running:
    
                self.handle_input()
                self.group.update()
                self.group.center(self.player.rect.center)
                self.group.draw(self.screen)
                pygame.display.flip()
    
                # fenetre fermé
                for event in pygame.event.get():
                    # if fermeture
                    if event.type == pygame.QUIT:
                        running = False
                        pygame.quit()
                        print("fermé")
    
                clock.tick(60)

    player.pi

    import pygame
    
    
    class Player(pygame.sprite.Sprite):
    
        def __init__(self, x, y):
            super().__init__()
            self.sprite_sheet = pygame.image.load('lumbertown/map/player.png')
            self.image = self.get_image(0, 0)
            self.image.set_colorkey([0, 0, 0])
            self.rect = self.image.get_rect()
            self.position = [x, y]
            self.image = {
                'down' : self.get_image(0, 0),
                'left' : self.get_image(0, 32),
                'right' : self.get_image(0, 64),
                'up' : self.get_image(0, 96)
            }
            self.speed = 5
    
        def change_animation(self, name):
            self.image = self.images
            self.image.set_colorkey(0, 0, 0)
    
        def move_rig(self): self.position[0] += self.speed
    
        def move_left(self): self.position[0] -= self.speed
    
        def move_down(self): self.position[1] += self.speed
    
        def move_up(self): self.position[1] -= self.speed
    
    
        def update(self):
            self.rect.topleft = self.position
    
        def get_image(self, x, y):
            image = pygame.Surface([32, 32])
            image.blit(self.sprite_sheet, (0, 0), (x, y, 32, 32))
            return image
    

    voici les erreurs qui son print :

    Traceback (most recent call last):
    File "C:\Users\VERITE\OneDrive\Desktop\Louis Verite\godot\autre\main.py", line 8, in <module>
    game.run()
    File "C:\Users\VERITE\OneDrive\Desktop\Louis Verite\godot\autre\game.py", line 58, in run
    self.group.draw(self.screen)
    File "C:\Python310\lib\site-packages\pyscroll\group.py", line 79, in draw
    return self._map_layer.draw(surface, draw_area, new_surfaces)
    File "C:\Python310\lib\site-packages\pyscroll\orthographic.py", line 246, in draw
    self._render_map(
    File "C:\Python310\lib\site-packages\pyscroll\orthographic.py", line 427, in _render_map
    self._draw_surfaces(surface, surfaces_offset, surfaces)
    File "C:\Python310\lib\site-packages\pyscroll\orthographic.py", line 528, in _draw_surfaces
    surface.blits(draw_list2, doreturn=False)
    TypeError: Source objects must be a surface

    merci d'avance

    -
    Edité par LouisVerite 23 mai 2022 à 18:31:51

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2022 à 20:59:45

      Bonjour, Merci d'indiquer un titre en rapport avec votre problématique.

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Pour modifier votre titre, éditez le premier message de votre sujet.

      (titre originel : Problème avec pygame)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter

      TypeError avec pygame problème de surface

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown