Partage
  • Partager sur Facebook
  • Partager sur Twitter

rotation image rectangle avec collisions pygame

collisions, rotations

Sujet résolu
    22 avril 2016 à 19:29:44

    bonsoir j'aimerai arriver a comprendre comment faire une rotation d'une image sprite et en meme temps que le sprite.rect tourne pour qu'ainsi lors d'une rotations le rectangle du rect soit le meme que celui de l'image.

    on voit sur l'exemple qu'avec la rotation de l'image ca m'a créé un nouveau rectangle noir (que j'ai affiché pour comprendre) et j'aimerai que le rectangle soit superposé à l'image afin de pouvoir gérer les rotations. Or là, la collision avec le rectange gris se fait avec le rectangle noir et je voudrait qu'elle se fasse uniquement lorsque la voiture touche le rectangle. Je suis désespéré ca fait des heures que je cherche.

    merci d'avance.

     voiture voici ma voiture (car.png)

    ps : voici mon code le problème est à partir de la ligne 169 merci :) 

    import pygame, sys
    
    from pygame.locals import *
    
    from pygame import sprite
    
    import math # math library
    
    
    
    pygame.init()
    
    mainClock = pygame.time.Clock()
    
    degree = 0
    
    WHITE = 250,250,250
    
    
    
    
    
    screen = pygame.display.set_mode((1200, 750), 0, 32)
    
    pygame.display.set_caption('Teh test')
    
    
    
    player=pygame.sprite.Sprite() 
    
    player.image = pygame.image.load('car.png')
    
    player.rect=player.image.get_rect()
    
    
    
    
    
    
    
    
    
    
    
    block=sprite.Group()                    #on créé un groupe de sprite pour toute les collisions avec les blocs 
    
    block1=pygame.sprite.Sprite()           # on créé un sprite pour le block 1
    
    block2=pygame.sprite.Sprite()           #idem pour le bloc 2
    
    block1.rect = pygame.Rect(300,300,80,20)    #taille du blo 1
    
    block2.rect = pygame.Rect(100,400,80,100)   #taille du bloc 2
    
    
    
    block1.image = pygame.Surface((80,20))      #on assigne le bloc 1 a une surface
    
    block2.image = pygame.Surface((80,100))     #idem pour le bloc 2
    
    
    
    block1.image.fill((60,60,60))               #on change la couleur du bloc 1 
    
    block1.add(block)               #on ajoute le bloc 1 au groupe "block"
    
    block2.add(block) 
    
    
    
    ##monmur = pygame.rect(300,300,80,20)
    
    ##mondeuxiememur = pygame.rect(100,400,80,100)
    
    ##mescollisions = [monmur, mondeuxiememur]
    
    
    
    left = False
    
    right = False
    
    
    
    
    
    avance = False
    
    recule = False
    
    stop1 = False
    
    stop2 = False
    
    player1_x = 100
    
    player1_y = 100
    
    vitesse = 0
    
    vitessemax = 20
    
    vitessemin = 3
    
    
    
    
    
    while True:
    
     
    
    
    
        if right: 
    
            degree -= 2
    
            while degree < 0:
    
                degree += 358
    
        elif left: 
    
            degree += 2
    
            while degree > 358:
    
                degree -= 360
    
    
    
        dx = math.cos(math.radians(degree))
    
        dy = math.sin(math.radians(degree))
    
        
    
    ##    monpersonnage = pygame.rect(dx, dy, 50, 100)
    
        
    
        
    
        for event in pygame.event.get():
    
            if event.type == QUIT:
    
                pygame.quit()
    
                sys.exit()
    
            
    
            if event.type == KEYDOWN:
    
                if event.key == K_ESCAPE:
    
                    pygame.quit()
    
                    sys.exit()
    
                if event.key == K_LEFT: #and (avance == True or recule == True): 
    
                    left = True
    
    ##                if pygame.sprite.spritecollide(player1, block,0):
    
    ##                    left=False
    
    ##                    stop = True
    
                    
    
                if event.key == K_RIGHT:# and (avance == True or recule == True): 
    
                    right = True
    
                    if pygame.sprite.spritecollide(player1, block,0):
    
                       right=False
    
                       stop = True
    
                if event.key == K_UP:
    
                    avance = True
    
                    if pygame.sprite.spritecollide(player1, block,True):
    
    ##                    avance = False
    
    ##                    stop1 = True
    
                        print("ta mere")
    
                        
    
                        
    
                    
    
                if event.key == K_DOWN:
    
                    recule = True
    
                    if pygame.sprite.spritecollide(player1, block,0):
    
                        recule=False
    
                        stop2 = True
    
                        
    
                  
    
    
    
            if event.type == KEYUP: #pour pas que ca bouge quand on relache le doigt
    
                if event.key == K_LEFT: 
    
                    left = False
    
                    stop1 = False
    
                    stop2 = False
    
                elif event.key == K_RIGHT: 
    
                    right = False
    
                    stop1 = False
    
                    stop2 = False
    
                    stop2 = False
    
    
    
                elif event.key == K_UP: 
    
                    avance = False
    
                    stop1= False
    
                    stop2 = False
    
    
    
                elif event.key == K_DOWN:
    
                    recule = False
    
                    stop1 = False
    
                    stop2 = False
    
     
    
    ##    if avance: # on change la position 
    
    ##        player1_y -= int(vitesse * dx)
    
    ##        player1_x -= int(vitesse * dy)
    
    ##    elif recule:
    
    ##        player1_y += int(vitesse * dx)
    
    ##        player1_x += int(vitesse * dy)
    
        if stop1:
    
            player1_y-=0
    
            player1_x +=0
    
            recule = True
    
        if stop2:
    
            player1_y-=0
    
            player1_x +=0
    
            avance = True
    
        if avance == True or vitesse > vitessemin :
    
            if vitesse < vitessemax:
    
                vitesse = vitesse + 1
    
                
    
        if recule:
    
            player1_y += int(5 * dx)
    
            player1_x += int(5 * dy)
    
            
    
        if avance == False:
    
            if vitesse > 0:
    
                vitesse = vitesse - 2
    
        if vitesse>0:
    
            player1_y -= int(vitesse * dx)
    
            player1_x -= int(vitesse * dy)
    
    
    
        
    
        player.rect.y = player1_y
    
        player.rect.x = player1_x
    
        
    
       
    
        screen.fill((40, 40, 40))
    
    
    
    
    
    #################################################################################################
    
    
    
    ####   REGARDEZ A PARTIR D'ICI 
    
        
    
        player1=pygame.sprite.Sprite() 
    
        or_rect = player.image.get_rect()
    
        player1.image = pygame.transform.rotate(player.image,degree).convert()
    
    
    
        player1.rect = player1.image.get_rect(center = player.rect.center)
     
    
        screen.blit(player1.image,player1.rect)
    
        block.draw(screen)
    
        #screen.blit(player.image, player.rect)
    
        
    
       
    
        pygame.display.update()
    
        mainClock.tick(60)



    -
    Edité par fritouille821 22 avril 2016 à 19:36:12

    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2016 à 22:38:37

      les rectangles ne tournent pas, regardes du côté de mask ...

      -
      Edité par josmiley 22 avril 2016 à 22:39:09

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        22 avril 2016 à 23:41:10

        J'ai essayé de regarder les mask déjà mais je comprend trop rien :/ je débute donc déjà je passez des heures pour faire des choses qui sont sensé être simples..  Tu pourrais me donner un exemple s'il te plais même si tu me donne pas la "réponse"? 

        Merci ! :) 

        • Partager sur Facebook
        • Partager sur Twitter
          23 avril 2016 à 0:55:04

          merci beaucoup apres toute la soirée à me renseigner j'ai enfin trouvé ! bonne soirée merci !
          • Partager sur Facebook
          • Partager sur Twitter

          rotation image rectangle avec collisions pygame

          × 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