Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Programmation multimédia/Jeux
Programmation multimédia/Jeux Forum d'entraide sur la 2D, 3D, video, son, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/02/2011, 20h58   #1
Apocalypses
Membre confirmé
 
Avatar de Apocalypses
 
Homme
Étudiant
Inscription : novembre 2008
Messages : 296
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

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

Informations forums :
Inscription : novembre 2008
Messages : 296
Points : 274
Points : 274
Envoyer un message via MSN à Apocalypses
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
Apocalypses est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 21h38   #2
afranck64
Membre Expert
 
Avatar de afranck64
 
Homme Franck Awounang N.
Étudiant
Inscription : janvier 2009
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Franck Awounang N.
Âge : 21
Localisation : Autre

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

Informations forums :
Inscription : janvier 2009
Messages : 587
Points : 1 025
Points : 1 025
Envoyer un message via Yahoo à afranck64
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
Citation:
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
afranck64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 11h35   #3
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 670
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 670
Points : 722
Points : 722
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
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 12h00   #4
Apocalypses
Membre confirmé
 
Avatar de Apocalypses
 
Homme
Étudiant
Inscription : novembre 2008
Messages : 296
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

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

Informations forums :
Inscription : novembre 2008
Messages : 296
Points : 274
Points : 274
Envoyer un message via MSN à Apocalypses
Bonjour,

Par afranck64:

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

Citation:
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
Apocalypses est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 12h37   #5
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 670
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 670
Points : 722
Points : 722
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.
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 15h06   #6
Apocalypses
Membre confirmé
 
Avatar de Apocalypses
 
Homme
Étudiant
Inscription : novembre 2008
Messages : 296
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

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

Informations forums :
Inscription : novembre 2008
Messages : 296
Points : 274
Points : 274
Envoyer un message via MSN à Apocalypses
Oui l'image se deteriore considérablement, c'est ce que j'ai fais dans le code

Merci encore...

Mickael
Apocalypses est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2012, 02h12   #7
Jep31
Invité de passage
 
Jérémie Palas
Inscription : 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
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)
Jep31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2012, 09h55   #8
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 670
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 670
Points : 722
Points : 722
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 ?
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h06.


 
 
 
 
Partenaires

Hébergement Web