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.
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
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 beaucoup apres toute la soirée à me renseigner j'ai enfin trouvé ! bonne soirée merci !
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.
Python c'est bon, mangez-en.