Pygame TypeError surface
RésoluBonjour, 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.

import pygame
from game import Game
if __name__ == '__main__':
pygame.init()
game = Game()
game.run()
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)
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
Configuration: Windows / Chrome 101.0.4951.67
2 réponses
-
Contributeurbonjour,
merci de partager du texte, pas des images.
quand tu partages du code:
- précise le nom de chaque module
- spécifie le langage dans les balises de code (https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code)-
-
Contributeur@woroxpas facile de faire du copier/coller à partir de l'image du message d'erreur.
d'où vient lumbertown.player?
et le fichier lumbertown/map/carte.tmx? -
@yg_beyo voila un nouveau poste mieux écrit pour que tu vois mieux.
https://forums.commentcamarche.net/forum/affich-37598786-pygame-typeerror-surface?y0a-ot_AKQZ8K2SymHNQD89OJMpBRbYB8sdNXQzN-g8
-
-
Bonjour,
Ok, mais il vaut mieux copier le code ici, au lieu d'une image
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ça:
for k in range(10): print(k)