p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2008
    Messages : 327
    Points : 229
    Points
    229

    Par défaut Pygame - Probleme rotation

    Bonjour a tous,

    Comme son nom l'indique, j'ai une petite difficulté à réaliser la rotation d'une image pour un jeu 2D avec pygame... J'ai utilisé la fonction de la documentation pygame que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.image = pygame.transform.rotate(self.image_origine, angle)
    Jusqu'ici pas de probleme, mon image se tourne... mais mal :S

    Je prends une image de 50x50 avec un cercle parfait rouge en plein milieu de l'image : donc si tout le monde suit bien, nous ne devrions rien distinguer de la rotation puisqu'il tournerait sur lui meme... le probleme c'est que mon image bouge, j'en déduit que le point de rotation de l'image n'est pas au centre :S

    Comment règler ce probleme ?

    Merci d'avance à tous...

    Mickael

  2. #2
    Membre émérite
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2009
    Messages : 590
    Points : 995
    Points
    995

    Par défaut

    Bonsoir,
    Citation Envoyé par Apocalypses
    Je prends une image de 50x50 avec un cercle parfait rouge en plein milieu de l'image : donc si tout le monde suit bien, nous ne devrions rien distinguer de la rotation puisqu'il tournerait sur lui meme... le probleme c'est que mon image bouge, j'en déduit que le point de rotation de l'image n'est pas au centre :S
    Ou C'est tout simplement du au fait que le cercle n'est pas au centre de ton image.
    Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tuto, Web, ...)
    - Tests déjà effectués

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 813
    Points : 976
    Points
    976

    Par défaut

    c'est parceque le rectangle contenant l'image grandit, car tu rotate toujours un rectangle à la base.
    exemple:
    ça dessine un carré rouge dans sa surface bleue, clic sur l'image, ça dessine le même carré rouge rotate de 45 degrés dans sa surface bleue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from pygame import *
    screen = display.set_mode((300,300))
     
    img = Surface((100,100),SRCALPHA)
    img.fill((0,0,0,0))
    rect = img.get_rect()
    draw.rect(img,(255,0,0),rect.inflate(-2,-2),1)
    rect.center = 150,150
    screen.blit(img,rect)
    draw.rect(screen,(0,0,255),rect,1)
    display.flip()
     
    while event.wait().type != MOUSEBUTTONDOWN: pass
     
    img = transform.rotate(img,45)
    rect = img.get_rect()
    rect.center = 150,150
    draw.rect(screen,(0,0,255),rect,1)
    screen.blit(img,rect)
    display.flip()
     
    while event.wait().type != MOUSEBUTTONDOWN: pass

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2008
    Messages : 327
    Points : 229
    Points
    229

    Par défaut

    Bonjour,

    Par afranck64:

    Ou C'est tout simplement du au fait que le cercle n'est pas au centre de ton image.
    J'ai bien precisé :

    Je prends une image de 50x50 avec un cercle parfait rouge en plein milieu de l'image
    Quoi qu'il en soit, merci à josmiley pour son super exemple, très simple et explicite qui ma permit de comprendre que le rect etait modifié par la rotation, voici donc le code que j'ai remplacé pour que ceci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    self.image = pygame.transform.rotate(self.image_origine, angle)
    self.rect = self.image.get_rect()
    self.rect.center = self.rect_origine.center
    Merci beaucoup !!! Résolu

    Mickael

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 813
    Points : 976
    Points
    976

    Par défaut

    j'ajouterai qu'il vaut mieux éviter les rotations succesives mais plutôt refaire une rotation depuis l'image d'origine, car, non seulement l'image se déteriore à chaque rotation, mais comme on l'a vu, la surface gradit à chaque fois et finira par devenir immense.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2008
    Messages : 327
    Points : 229
    Points
    229

    Par défaut

    Oui l'image se deteriore considérablement, c'est ce que j'ai fais dans le code

    Merci encore...

    Mickael

  7. #7
    Invité de passage
    Inscrit en
    mars 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : mars 2011
    Messages : 5
    Points : 4
    Points
    4

    Par défaut

    Vieux sujet mais je complète la réponse.
    Sait on jamais ça pourrait aider ceux qui googlise ;-)
    Dans le cas où l'image bouge il faut plus que le code de Apocalypses

    Inspiré de l'exemple Chimp:http://fr.wikibooks.org/wiki/Pygame/...igne_par_ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     def rotation_image(self):
            centre_rect = self.rect.center
            rotate = pygame.transform.rotate
            angle = -math.degrees(self.orient) #- 90
            self.image = rotate(self.imageBase, angle)
            self.rect = self.image.get_rect(center=centre_rect)

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 813
    Points : 976
    Points
    976

    Par défaut

    Citation Envoyé par Jep31 Voir le message
    ...
    Dans le cas où l'image bouge ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     def rotation_image(self):
            centre_rect = self.rect.center
            rotate = pygame.transform.rotate
            angle = -math.degrees(self.orient) #- 90
            self.image = rotate(self.imageBase, angle)
            self.rect = self.image.get_rect(center=centre_rect)
    qu'y a-t-il de plus ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] [C# XNA]Probleme rotation
    Par Exec57 dans le forum C#
    Réponses: 12
    Dernier message: 03/12/2012, 19h07
  2. Probleme Rotation (avec ou sans quaternion)
    Par Scheb dans le forum Moteurs 3D
    Réponses: 6
    Dernier message: 01/05/2012, 19h07
  3. [OpenGL] probleme rotations/ translations
    Par Daemonkii dans le forum Windows
    Réponses: 4
    Dernier message: 16/12/2007, 17h42
  4. [pygame]Probleme avec init
    Par xtrema dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 30/07/2007, 14h34
  5. Probleme de rotation de bannieres
    Par bug33 dans le forum JavaScript
    Réponses: 5
    Dernier message: 06/09/2005, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo