Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre confirmé Avatar de Apocalypses
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2008
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 320
    Points : 281
    Points
    281

    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 :
    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 Expert
    Avatar de afranck64
    Homme Profil pro Franck Awounang N.
    Étudiant
    Inscrit en
    janvier 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Nom : Homme Franck Awounang N.
    Âge : 22
    Localisation : Autre

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

    Informations forums :
    Inscription : janvier 2009
    Messages : 590
    Points : 1 033
    Points
    1 033

    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 chevronné
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 728
    Points : 791
    Points
    791

    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 :
    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é Avatar de Apocalypses
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2008
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 320
    Points : 281
    Points
    281

    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 :
    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 chevronné
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 728
    Points : 791
    Points
    791

    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é Avatar de Apocalypses
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2008
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 320
    Points : 281
    Points
    281

    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
    Profil pro Jérémie Palas
    Inscrit en
    mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Nom : Jérémie Palas

    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 :
    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 chevronné
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 728
    Points : 791
    Points
    791

    Par défaut

    Citation Envoyé par Jep31 Voir le message
    ...
    Dans le cas où l'image bouge ...
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •