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: Ce code est-il correctement écrit?


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut Pygame: Ce code est-il correctement écrit?
    Bonjour.

    Dans le cadre de la rédaction d'un article sur kivy vs pygame, j'ai besoin de savoir si le code suivant est correctement écrit et s'il pourrait être écrit plus synthétiquement?
    Ne maîtrisant pas pygame, j'aimerai votre avis. Merci

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import pygame
    import sys
     
    # Initialisation de Pygame
    pygame.init()
     
    # Paramètres de la fenêtre
    screen_width, screen_height = 800, 600
    screen = pygame.display.set_mode((screen_width, screen_height))
    pygame.display.set_caption('Pygame Animation')
     
    # Couleurs et police
    black = (0, 0, 0)
    white = (255, 255, 255)
    font_size = 60
    font = pygame.font.Font(None, font_size)
     
    # Variables d'animation
    opacity = 255
    fade_speed = 5
    fade_in = True
    clock = pygame.time.Clock()
    fade_duration = 2000  # Durée en millisecondes pour une phase d'animation (fondu en entrée ou en sortie)
    last_update_time = pygame.time.get_ticks()
     
    # Fonction pour dessiner le texte avec une opacité donnée
    def render_text_with_alpha(text, alpha):
        text_surface = font.render(text, True, white)
        text_surface.set_alpha(alpha)
        return text_surface
     
    # Boucle principale
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
     
        # Mise à jour de l'opacité
        current_time = pygame.time.get_ticks()
        elapsed_time = current_time - last_update_time
     
        if elapsed_time >= fade_duration:
            fade_in = not fade_in
            last_update_time = current_time
     
        if fade_in:
            opacity = min(opacity + fade_speed, 255)
        else:
            opacity = max(opacity - fade_speed, 0)
     
        # Dessin
        screen.fill(black)
        text_surface = render_text_with_alpha("Hello Pygame!", opacity)
        text_rect = text_surface.get_rect(center=(screen_width // 2, screen_height // 2))
        screen.blit(text_surface, text_rect)
        pygame.display.flip()
     
        # Limiter les FPS
        clock.tick(60)

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    ton render_text_with_alpha n'est pas top car applique alpha à toute la surface , même au background.
    plusieurs méthodes pour un meilleur résultat, voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def render_txt_surf_with_alpha(txt_surf,alpha):
        # surface de la taille du texte
        bg = pygame.Surface(txt_surf.get_size(),pygame.SRCALPHA)
        # entierement blanche avec un alpha variable
        bg.fill((255,255,255,alpha))
        # on colle le txt en gardant l'alpha le plus petit
        bg.blit(txt_surf,(0,0),special_flags=pygame.BLEND_RGBA_MIN)
        return bg

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    merci @josmiley

  4. #4
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Je n'ai pas réussi à intégrer ta fonction telle quelle, mais j'ai tenu compte de ta remarque avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def render_txt_surf_with_alpha(txt_surf, alpha):
        txt_surf.set_alpha(alpha)
        return txt_surf

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    j'ai essayé ton code, il fonctionne correctement alors qu'il ne devrait pas ...
    j'ai investigué et effectivement il y a eu des changements : "Changed in pygame 2.0: per-surface alpha can be combined with per-pixel alpha."
    donc, bien joué.

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

Discussions similaires

  1. [QThread] Mon code est-il correct ?
    Par oneDev dans le forum Multithreading
    Réponses: 0
    Dernier message: 16/08/2019, 12h06
  2. [XL-2010] Mon Code est-il correct ?
    Par Seuche dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/01/2016, 22h45
  3. [Python 3.X] [Vérification] Ce code est-il correct et efficace ?
    Par Ennicolem dans le forum Django
    Réponses: 0
    Dernier message: 11/01/2015, 21h02
  4. Ce code est-il correct ?
    Par cirdan_elf dans le forum C
    Réponses: 2
    Dernier message: 02/12/2009, 14h28
  5. Réponses: 5
    Dernier message: 10/11/2007, 10h20

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