La rotation que je fait ne ce fait pas depuis le centre

Résolu/Fermé
dragonchate_35 Messages postés 18 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 13 février 2020 - 4 févr. 2020 à 15:39
 trifou - 5 févr. 2020 à 20:18
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
A voir également:

2 réponses

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
4 févr. 2020 à 18:05
bonjour, peux-tu partager ton code?
0
dragonchate_35 Messages postés 18 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 13 février 2020
5 févr. 2020 à 10:29
c'est bon
0
dragonchate_35 Messages postés 18 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 13 février 2020
Modifié le 5 févr. 2020 à 11:11
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)

0
dragonchate_35 Messages postés 18 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 13 février 2020
5 févr. 2020 à 10:32
voila le "l.png"
https://media.discordapp.net/attachments/669181663368052786/674547642235355136/unknown.png
0
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()
0
dragonchate_35 Messages postés 18 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 13 février 2020 > trifou
5 févr. 2020 à 11:05
merci de ta reponce

au final quelle ligne je doit rajouter et où
0
trifou > dragonchate_35 Messages postés 18 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 13 février 2020
Modifié le 5 févr. 2020 à 20:18
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.
0