Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de détection colliderect() pygame

Sujet résolu
    31 mars 2024 à 16:35:41

    Bonjour, 

    Dans mon jeu en python, il y a une partie avec un ordinateur qui ne contient qu'une seule application au début : Internet.

    Quand lance cette application, on arrive sur une page où l'on peut télécharger un VPN (faux évidemment).

    Quand le "vpn" est installé, je peux lancer ce dernier, mais je ne peux plus lancer internet.


    La partie qui gère ordinateur:

    def Computer(mouseRect):
    
        global place, connected, mouseHoversAppli
    
        try: 
            screen.blit(wallpaper, (0,0))
        except:
            pygame.draw.rect(screen, (0, 80, 0), (0, 0, infos.current_w, infos.current_h))
    
        TasksBar()
    
        s = pygame.Surface((78, 76), pygame.SRCALPHA)
        s.fill((50, 50, 50, 128))    
    
        for i in applicationsComputer:
            rect = pygame.Rect(i[1] * 98, i[2] * 96, 98, 96)
    
            if mouseRect.colliderect(rect): 
                screen.blit(s, (i[1]*98+10, i[2]*96 + 10))
                mouseHoversAppli = i[0]
            else: mouseHoversAppli = None
    
            screen.blit(eval(i[0]), rect)
            print(mouseRect.colliderect(rect))
            
        return place, mouseHoversAppli


    La partie qui gère les évènements : 

    def CheckEvents():
        global continueUpdate, place, mouseHoversBackTxtButton1, mouseHoversGreenButton, startDepressurization, inspectObject, connectedToInternet, mouseHoversDownloadButton, vpnDownloaded, applicationsComputer, mouseHoversAppli
    
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                continueUpdate = False
            if e.type == MOUSEBUTTONDOWN and e.button == 1:
                if place == "homepage":
                    if mouseHoversPlayTxtButton:
                        place = "level1"
                        player.show, player.canMove, player.fall = True, True, False
                    elif mouseHoversSettingsTxtButton:
                        place="settings"
    
                elif place == "settings":
                    if mouseHoversBackTxtButton1:
                        place = "homepage"
                
                elif place == "depressurizationairlock1":
                    if mouseHoversGreenButton:
                        startDepressurization = True
                        inspectObject = [False, ""]
                
                elif place == "computer":
                    if mouseHoversAppli == "interneT98x96":
                        place = "internet"
                    elif mouseHoversAppli == "logoVpN98x96":
                        place = "vpn"
                elif place == "internet":
                    if mouseHoversCloseButton:
                        place = "computer"
                    elif mouseHoversDownloadButton:
                        vpnDownloaded, applicationsComputer = DownloadApp()
    
        return continueUpdate, place, inspectObject, connectedToInternet, vpnDownloaded, applicationsComputer

    Au début la liste qui contient les applications ressemble à ca : 

    applicationsComputer = [
                ["interneT98x96", 0, 0],
            ]


    Puis quand on télécharge le "vpn" : 

    def DownloadApp():
        global vpnDownloaded, applicationsComputer
        if not vpnDownloaded: vpnDownloaded = downloading.main()
        applicationsComputer.append(["logoVpN98x96", 1, 0])
        vpnDownloaded = True
        return vpnDownloaded, applicationsComputer


    downloading.main() est juste un script qui met en place une barre de téléchargement, si je l'enlève cela ne change rien au script principal.

    Voila voila.

    Ruben


     

    -
    Edité par RubenAdhesif 31 mars 2024 à 21:23:05

    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2024 à 17:03:58

      Bonjour, Merci d'indiquer un titre de sujet en rapport avec votre problématique.

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

      (titre originel : Problème pygame)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        1 avril 2024 à 13:41:29

        C'est la logique du test for/if/else dans computer qui pèche ...

        Fais le à la main tu comprendras.

        • Partager sur Facebook
        • Partager sur Twitter

        Python c'est bon, mangez-en. 

          1 avril 2024 à 16:17:37

          Bonjour, 

          Désolé mais je ne comprend toujours pas...

          Le problème parait si évident que ça ?

          J'ai l'impression que le for ne prend en compte que la dernière valeur de la liste car quand j'ajoute une troisième application, uniquement la dernière est cliquable

          -
          Edité par RubenAdhesif 1 avril 2024 à 16:22:05

          • Partager sur Facebook
          • Partager sur Twitter
            1 avril 2024 à 18:13:35

            Ton for passe en revue toute la liste au lieu de s'arrêter lorsqu'il y a collision. Ainsi il n'y a que la dernière valeur testée qui compte .

            -
            Edité par josmiley 1 avril 2024 à 18:14:02

            • Partager sur Facebook
            • Partager sur Twitter

            Python c'est bon, mangez-en. 

              1 avril 2024 à 20:13:35

              Ah oui d'accord j'ai compris.

              merci beaucoup !

              :)

              • Partager sur Facebook
              • Partager sur Twitter

              Problème de détection colliderect() pygame

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown