La rotation que je fait ne ce fait pas depuis le centre [Résolu]

Signaler
Messages postés
18
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
13 février 2020
-
 trifou -
bonjour

je tourne une image rectangle de 90° en 90°
donc le centre de l'image ne devrait pas bouger
mais étrangement il bouge

merci d'avance

2 réponses

Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659
bonjour, peux-tu partager ton code?
Messages postés
18
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
13 février 2020

c'est bon
Messages postés
18
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
13 février 2020

le voila:

 
#!/usr/bin/python
import pygame
from pygame.locals import *
import random
import time
pygame.init()
fenetre = pygame.display.set_mode((340, 620), RESIZABLE)
font =pygame.image.load("font.png").convert()
font =pygame.transform.scale(font,(340,620))
fenetre.blit(font,(0,0))
pygame.display.flip()

cd = [390, 3270]
td = [190, 1270, 290, 2270, 40, 4180, 50, 5180, 60, 6180]
dt = [10, 1180, 20, 2180, 490, 4270, 590, 5270, 590, 5270, 690, 6270]
uc = [30, 3180]
dd = [70, 790, 7180, 7270]











xpiece = 160
ypiece = 0
p = 0
while p == 0 :
 idbox = 0
 piece = random.randint(1, 7)
 xpiece = 160
 ypiece = 0
 if piece == 1 :
  font2 =pygame.image.load("l.png")
  font2 =pygame.transform.scale(font2,(40,60)).convert_alpha()
  font2 = pygame.transform.rotate(font2, 90)
  fenetre.blit(font2,(xpiece,ypiece))
  piece = 10
 elif piece == 2 :
  font2 =pygame.image.load("j.png")
  font2 =pygame.transform.scale(font2,(40,60)).convert_alpha()
  fenetre.blit(font2,(xpiece,ypiece))
  piece = 20
 elif piece == 3 :
  font2 =pygame.image.load("i.png")
  font2 =pygame.transform.scale(font2,(20,80)).convert_alpha()
  fenetre.blit(font2,(xpiece,ypiece))
  piece = 30
 elif piece == 4 :
  font2 =pygame.image.load("t.png")
  font2 =pygame.transform.scale(font2,(60,40)).convert_alpha()
  fenetre.blit(font2,(xpiece,ypiece))
  piece = 40
 elif piece == 5 :
  font2 =pygame.image.load("z.png")
  font2 =pygame.transform.scale(font2,(60,40)).convert_alpha()
  fenetre.blit(font2,(xpiece,ypiece))
  piece = 50
 elif piece == 6 :
  font2 =pygame.image.load("s.png")
  font2 =pygame.transform.scale(font2,(60,40)).convert_alpha()
  fenetre.blit(font2,(xpiece,ypiece))
  piece = 60
 elif piece == 7 :
  font2 =pygame.image.load("o.png")
  font2 =pygame.transform.scale(font2,(40,40)).convert_alpha()
  fenetre.blit(font2,(xpiece,ypiece))
  piece = 70
 pygame.display.flip()
 ypiece2 = 0
 
 
 while ypiece2 != 600:
  ypiece += 0
  if piece in cd:
   xpiece2 = xpiece + 80
   ypiece2 = ypiece + 20
  elif piece in td:
   xpiece2 = xpiece + 60
   ypiece2 = ypiece + 40
  elif piece in dt:
   xpiece2 = xpiece + 40
   ypiece2 = ypiece + 60
  elif piece in uc:
   xpiece2 = xpiece + 20
   ypiece2 = ypiece + 80
  elif piece in dd:
   xpiece2 = xpiece + 40
   ypiece2 = ypiece + 40
  time.sleep(0.01)
  for event in pygame.event.get() :
   print xpiece
   if event.type == KEYDOWN:
    if event.key == K_LEFT :
     if xpiece != 20:
      xpiece -= 10
    elif event.key == K_RIGHT :
     if xpiece2 != 320:
      xpiece += 10
    elif event.key == K_DOWN :
     if ypiece2 != 590:
      ypiece += 20
    elif event.key == K_r :
     font2 = pygame.transform.rotate(font2, 90)
     print 1
  fenetre.blit(font,(0,0))
    fenetre.blit(font2,(xpiece,ypiece))
    pygame.display.flip()
   
   
   
   
   
   
   
   
   
   
   
   
 time.sleep(1)

Messages postés
18
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
13 février 2020

voila le "l.png"
https://media.discordapp.net/attachments/669181663368052786/674547642235355136/unknown.png
Bonjour,

Vu que tu es inscrit, modifie ton message et utilise les balises codes du forum afin de respecter la mise en forme de ton code.

Maintenant ton problème.
Regarde ce qu'il se passe en réalité, prends un objet rectangulaire (par ex. ton téléphone) et fais le pivoter, sachant que ce qui doit englober l'aire de ton téléphone est un rectangle élastique, au visuel tu constateras que ce rectangle change de dimension à chaque rotation de x degrés.

Avec pygame, c'est pareil, le rectangle de la surface change de dimension à chaque rotation, alors il suffit de repositionner la coordonnée x, y du rectangle.

Un exemple

import pygame as pg

SCREEN_BACKGROUND = pg.Color('pink')
SQUARE_BACKGROUND = pg.Color('purple')
FPS = 10

def square_update(angle):
    rotate_square = pg.transform.rotate(square, angle)
    rotate_square_rect = rotate_square.get_rect()
    rotate_square_rect.center = square_rect.center
    screen.fill(SCREEN_BACKGROUND)
    screen.blit(rotate_square, rotate_square_rect)
    pg.display.update()


screen = pg.display.set_mode((400, 400))
screen.fill(SCREEN_BACKGROUND)

square = pg.surface.Surface((100, 100)).convert_alpha()
square.fill(SQUARE_BACKGROUND)

square_rect = square.get_rect()
square_rect.center = 200, 200
screen.blit(square, square_rect)

pg.display.update()

ROTATE_EVENT = pg.USEREVENT
rotate_state = False
pg.time.set_timer(ROTATE_EVENT, 50)

clock = pg.time.Clock()
running = True
angle = 0

while running:
    clock.tick(FPS)
    for evt in pg.event.get():
        if evt.type == pg.QUIT or (
            evt.type == pg.KEYUP and evt.key == pg.K_ESCAPE
        ):
            running = False
            break
        elif evt.type == ROTATE_EVENT:
            angle += 5
            angle %= 360
            square_update(angle)

pg.quit()
Messages postés
18
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
13 février 2020
> trifou
merci de ta reponce

au final quelle ligne je doit rajouter et où
>
Messages postés
18
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
13 février 2020

C'est ton code, c'est toi qui vois, mais de toute façon, tout ton code est à refaire. Je ne vois pas comment tu pourrais continuer de cette façon. Coder un tétris sans utiliser de fonctions, ça va pas du tout le faire.