Nombres décimaux sur python

Résolu/Fermé
alex - Modifié le 27 déc. 2020 à 17:02
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 27 déc. 2020 à 20:17
Bonjour, je voudrais savoir pourquoi ma version python(ou mon logiciel de programmation) ne prend pas en compte les nombres décimales. Je vous explique:
je voudrais programmer un jeux en python ou un personnage peut se déplacer de 1.5 pixel à chaque fois que j'appuis sur une touche. le problème, c'est que le calcul arrondis la vitesse à 1 ce qui pause problème pour mon jeu. Voici le code que j'ai utilisé:
import pygame

class Player(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__()
        self.speed = 1.5
        self.skin = pygame.image.load('player/player_right.png')
        self.rect = self.skin.get_rect()
        self.rect.x = 100
        self.rect.y = 670

    def move_left(self):

        self.rect.x -= self.speed
        self.skin = pygame.image.load('player/player_left.png')

    def move_right(self):

        self.rect.x += self.speed
        self.skin = pygame.image.load('player/player_right.png')

sur mon script principal, je met un print de rect.x et le calcul met au cordonées 1 au lieu de 1.5
je voudrais don comment résoudre ce problème merci.

4 réponses

yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
Modifié le 27 déc. 2020 à 18:21
bonjour,
il me semble probable que l'attribut rect.x soit un entier.
je pense alors que tu dois mémoriser et calculer la position en float, et l'assigner à x.
1
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
27 déc. 2020 à 18:18
exemple:
    def __init__(self):
        # ...
        self.posx = self.rect.x

    def move_left(self):
        self.posx -= self.speed
        self.rect.x = self.posx    
0
jee pee Messages postés 39641 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 237
27 déc. 2020 à 17:09
Bonjour,

C'est probablement lié au type de la variable.

Si tu mets x=100, c'est un integer mais avec x=100.0 x est un float. Initialise toutes tes variables en float.
0
ca ne marche pas, j'ai changé x et y en float mais ca ne marche toujours pas
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
27 déc. 2020 à 18:22
montre-nous comment tu as changé x et y en float.
0
alex > yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
27 déc. 2020 à 19:10
self.rect.x = 100.0
self.rect.y = 670.0
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476 > alex
27 déc. 2020 à 19:40
cela ne change pas le type de x et y, qui reste un entier.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
27 déc. 2020 à 19:07
Bonsoir

Une chance sur deux que mon message soit utile.

Ne codant pas en mode fenêtré en Python, je ne sais pas s’il est possible ou non de donner des coordonnées décimales à un(e?) sprite.
Mais littéralement
se déplacer de 1.5 pixel
est impossible.
Le pixel est la surface unitaire d’un écran, il n’est pas divisible.

Si les coordonnées du sprite sont effectivement en pixels, ça va forcément caster le résultat en valeur entière.

Si les coordonnées du sprite sont dans un autre système, qui accepte des valeurs décimales, alors j’ai posté ce message pour rien.
0
jee pee Messages postés 39641 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 237
27 déc. 2020 à 19:16
C'est une observation fort judicieuse ;-)
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931 > jee pee Messages postés 39641 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024
27 déc. 2020 à 20:17
Je ne dis pas que des conneries ;)
0