IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Pygame - Probleme rotation


Sujet :

Programmation multimédia/Jeux Python

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    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 éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    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 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    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, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    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 actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    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 expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    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 actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    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
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 6
    Points
    6
    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 expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    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, 20h07
  2. Probleme Rotation (avec ou sans quaternion)
    Par Scheb dans le forum Moteurs 3D
    Réponses: 6
    Dernier message: 01/05/2012, 20h07
  3. [OpenGL] probleme rotations/ translations
    Par Daemonkii dans le forum Windows
    Réponses: 4
    Dernier message: 16/12/2007, 18h42
  4. [pygame]Probleme avec init
    Par xtrema dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 30/07/2007, 15h34
  5. Probleme de rotation de bannieres
    Par bug33 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/09/2005, 21h30

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