Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur "invalid destination position for blit"

    25 mai 2019 à 10:13:39

    Bonjour , 

    Je suis bloqué depuis quelques jours sur un problème persistant TypeError: invalid destination position for blit

    lorsque le rectangle de mon personnage traverse celui de l'arbre préalablement défini , sachant que le but étant que le personnage ne puisse pas avancer dans ce rectangle et recule lorsqu'il est en contact avec lui voici mon code : 

    pygame.init()#Appel de la méthode
    fenetre=pygame.display.set_mode((630,480))#Création de l'objet fenetre
    pygame.display.set_caption("The Picker")
    
    
    #Chargement des images
    fond=pygame.image.load("map.jpg")
    rose=pygame.image.load("money.png")
    perso=pygame.image.load("Bas personnage.png")
    
    fond = pygame.transform.scale(fond, (630, 480))
    rose=pygame.transform.scale(rose, (30, 30))
    
    message = pygame.image.load("message.png")
    message = pygame.transform.scale(message, (287, 72))
    
    obstacle_arbre1 = pygame.image.load("obstacle.png")
    obstacle_arbre2 = pygame.image.load("obstacle.png")
    obstacle_boitepostale1 = pygame.image.load("obstacle.png")
    obstacle_boitepostale2 = pygame.image.load("obstacle.png")
    obstacle_maison = pygame.image.load("obstacle.png")
    
    obstacle_arbre1 = pygame.transform.scale(obstacle_arbre1, (130, 122))
    obstacle_arbre2 = pygame.transform.scale(obstacle_arbre2, (130, 122))
    obstacle_boitepostale1 = pygame.transform.scale(obstacle_boitepostale1, (39, 44))
    obstacle_boitepostale2 = pygame.transform.scale(obstacle_boitepostale2, (39, 44))
    obstacle_maison = pygame.transform.scale(obstacle_maison, (285, 215))
    
    
    #Création des rectangles
    rect_perso=perso.get_rect()
    fenetre.blit(perso,rect_perso)
    rect_rose=rose.get_rect()
    rect_message = message.get_rect()
    
    rect_obstacle_arbre1 = obstacle_arbre1.get_rect()
    rect_obstacle_arbre2 = obstacle_arbre2.get_rect()
    rect_obstacle_boitepostale1 = obstacle_boitepostale1.get_rect()
    rect_obstacle_boitepostale2 = obstacle_boitepostale2.get_rect()
    rect_obstacle_maison = obstacle_maison.get_rect()
    
    
    #initialisation des positions
    rect_perso.x=225
    rect_perso.y=50
    
    rect_rose.x=35
    rect_rose.y=95
    
    rect_message.x = 250
    rect_message.y = 400
    
    rect_obstacle_arbre1.x =35
    rect_obstacle_arbre1.y =95
    
    rect_obstacle_arbre2.x =35
    rect_obstacle_arbre2.y =236
    
    rect_obstacle_boitepostale1.x =185
    rect_obstacle_boitepostale1.y =20
    
    rect_obstacle_boitepostale2.x =185
    rect_obstacle_boitepostale2.y =430
    
    rect_obstacle_maison.x =194
    rect_obstacle_maison.y =127
    
    
    score = 0
    comic_font = pygame.font.SysFont('Agency FB',25)
    text_surface = comic_font.render("Score: {}".format(score), True,[255,255,255])
    
    
    #Affichage des images
    def affichage():
        fenetre.blit(fond,(0,0))
        fenetre.blit(perso,rect_perso)
        fenetre.blit(rose,rect_rose)
    
        fenetre.blit(obstacle_arbre1,rect_obstacle_arbre1)
        fenetre.blit(obstacle_arbre2,rect_obstacle_arbre2)
        fenetre.blit(obstacle_boitepostale1,rect_obstacle_boitepostale1)
        fenetre.blit(obstacle_boitepostale2,rect_obstacle_boitepostale2)
        fenetre.blit(obstacle_maison,rect_obstacle_maison)
    
        fenetre.blit(text_surface,(5,5))
        pygame.display.update()
    
    
    def affichage1():
        fenetre.blit(fond,(0,0))
        fenetre.blit(perso,rect_perso)
        fenetre.blit(rose,rect_rose)
        fenetre.blit(message,rect_message)
    
        fenetre.blit(obstacle_arbre1,rect_obstacle_arbre1)
        fenetre.blit(obstacle_arbre2,rect_obstacle_arbre2)
        fenetre.blit(obstacle_boitepostale1,rect_obstacle_boitepostale1)
        fenetre.blit(obstacle_boitepostale2,rect_obstacle_boitepostale2)
        fenetre.blit(obstacle_maison,rect_obstacle_maison)
    
        fenetre.blit(text_surface,(5,5))
        pygame.display.update()
    
    
    affichage1()
    
    
    mixer.init()
    bruit_pas=mixer.Sound("pas.wav")
    recup_rose = mixer.Sound("loot.wav")
    
    pygame.mixer.music.load("musique.mp3")
    pygame.mixer.music.play()
    volume = pygame.mixer.music.get_volume()
    pygame.mixer.music.set_volume(0.07)
    
    
    
    #Boucle infinie : détection des événements au clavier et action
    while True:
        comic_font = pygame.font.SysFont('Agency FB',25)
        text_surface = comic_font.render("Score: {}".format(score), True,[255,255,255])
    
        for evenement in pygame.event.get():
            if evenement.type==QUIT :
                pygame.quit()
                sys.exit()
            elif evenement.type==KEYDOWN:
                if evenement.key==K_UP:
                    perso=pygame.image.load("Haut personnage.png")
                    rect_perso.y=rect_perso.y-16
                    bruit_pas.play()
    
                if rect_perso.top<0:
                        rect_perso.bottom=480
                affichage()
                if evenement.key==K_DOWN:
                    perso=pygame.image.load("Bas personnage.png")
                    rect_perso.y=rect_perso.y+16
                    bruit_pas.play()
                    if rect_perso.top>480:
                        rect_perso.bottom=0
                    affichage()
                if evenement.key==K_LEFT:
                    perso=pygame.image.load("Gauche personnage.png")
                    rect_perso.x=rect_perso.x-16
                    bruit_pas.play()
    
                    if rect_perso.left<0:
                        rect_perso.left=630
                    affichage()
                if evenement.key==K_RIGHT:
                    perso=pygame.image.load("droite personnage.png")
                    rect_perso.x=rect_perso.x+16
                    bruit_pas.play()
                    if rect_perso.right>630:
                        rect_perso.left=0
                    affichage()
    
            elif rect_perso.colliderect(rect_obstacle_arbre1) == True :
                if evenement.key == K_LEFT:
                      rect_perso = rect_perso.x+1
                elif evenement.key == K_RIGHT:
                        rect_perso = rect_perso.x-1
                elif evenement.key == K_DOWN:
                        rect_perso = rect_perso.y+1
                elif evenement.key == K_UP:
                       rect_perso = rect_perso.y-1
                affichage()
    
    #exemple avec l'arbre 1
    
    
            elif rect_perso.colliderect(rect_rose)==True :
                rect_rose.x=randint(0,600)
                rect_rose.y=randint(0,450)
                recup_rose.play()
                score = score+1
                affichage()
    
    
    
    
    mixer.quit()
    

    J'en appelle à votre aide et je remercie d'avance toute personne qui m'apportera son aide ! :D

    -
    Edité par ZakariaElMorabiti 25 mai 2019 à 10:15:02

    • Partager sur Facebook
    • Partager sur Twitter
      26 mai 2019 à 7:01:13

      Il faut le message d'erreur complet
      • Partager sur Facebook
      • Partager sur Twitter

      Erreur "invalid destination position for blit"

      × 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