MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    DrawString et Overlay

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    33 Messages 5 Publieurs 4.2k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • FolganskyF Hors-ligne
      Folgansky Correcteurs
      dernière édition par

      Mettre le RESET annule bien la couleur venant du String mais pas celle du DrawString.
      Du coup je peux avoir mon string en vert qui fait bugguer en bleu le reste par exemple =p

      1 réponse Dernière réponse Répondre Citer 0
      • AymericRedA Hors-ligne
        AymericRed
        dernière édition par

        Ah d’accord, ben j’ai pas d’autre solution ^^

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

        1 réponse Dernière réponse Répondre Citer 0
        • SCAREXS Hors-ligne
          SCAREX
          dernière édition par

          Je comprends pas trop où est le problème, tu ne peux pas draw dans le RenderGameOverlayEvent ?

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 0
          • FolganskyF Hors-ligne
            Folgansky Correcteurs
            dernière édition par

            Mon problème c’est que je ne sais afficher qu’un overlay qui prend tout l’écran en gros.

            Du coup ça cache toutes les infos comme l’armure, la bouffe etc

            1 réponse Dernière réponse Répondre Citer 0
            • SCAREXS Hors-ligne
              SCAREX
              dernière édition par

              Et pourquoi ne pas recopier la fonction drawTextureModalRect dans la classe Gui ?

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

              1 réponse Dernière réponse Répondre Citer 0
              • FolganskyF Hors-ligne
                Folgansky Correcteurs
                dernière édition par

                Parce que je n’ai pas vraiment idée de quoi tu me parles ^^’
                J’ai des lacunes évidentes.

                M’enfin, si j’arrive à résoudre le problème de l’affichage de mon String, je pourrais me passer de l’affichage d’overlay (ce qui m’évitera de nombreuses heures à chercher comment afficher correctement les overlays)

                1 réponse Dernière réponse Répondre Citer 0
                • SCAREXS Hors-ligne
                  SCAREX
                  dernière édition par

                  Cherche une fonction appelée drawTextureModalRect dans la classe Gui de Minecraft ou copie cette fonction (c’est la même mais avec les paramètres renommées pour une meilleure compréhension) :

                  @SideOnly(Side.CLIENT)
                  public static void drawTexturedModalRect(double x, double y, double textureX, double textureY, double width, double height) {
                  Tessellator tessellator = Tessellator.instance;
                  tessellator.startDrawingQuads();
                  tessellator.addVertexWithUV(x, y + height, 0F, textureX * 0.00390625F, (textureY + height) * 0.00390625F);
                  tessellator.addVertexWithUV(x + width, y + height, 0.0F, (textureX + width) * 0.00390625F, (textureY + height) * 0.00390625F);
                  tessellator.addVertexWithUV(x + width, y, 0F, (textureX + width) * 0.00390625F, textureY * 0.00390625F);
                  tessellator.addVertexWithUV(x, y, 0F, textureX * 0.00390625F, textureY * 0.00390625F);
                  tessellator.draw();
                  }
                  

                  Pour l’affichage de texte, je suppose que le problème c’est que le texte n’est pas affiché ?

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

                  1 réponse Dernière réponse Répondre Citer 0
                  • FolganskyF Hors-ligne
                    Folgansky Correcteurs
                    dernière édition par

                    Non le problème concernant le drawString c’est qu’il modifie la couleur d’affichage de la nourriture et de l’armure

                    1 réponse Dernière réponse Répondre Citer 0
                    • SCAREXS Hors-ligne
                      SCAREX
                      dernière édition par

                      Essaie de faire un GL11.glColor4f(0F, 0F, 0F, 1F) après le rendu, ça devrait enlever la couleur.

                      Site web contenant mes scripts : http://SCAREXgaming.github.io

                      Pas de demandes de support par MP ni par skype SVP.
                      Je n'accepte sur skype que l…

                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002R Hors-ligne
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                        dernière édition par

                        Ou alors :

                        @SubscribeEvent
                        public void onRenderGameOverlay(RenderGameOverlayEvent.Post event)
                        {
                        if(event.type == RenderGameOverlayEvent.ElementType.TEXT)
                        {
                        // reste du code
                        
                        1 réponse Dernière réponse Répondre Citer 1
                        • FolganskyF Hors-ligne
                          Folgansky Correcteurs
                          dernière édition par

                          Scarex, ton conseil fait que tout devient noir ^^
                          J’ai pas cherché à savoir si c’était le troisième int du drawString qui fait ça ou la ligne que tu m’as conseillé d’ajouter, en tout cas c’est pas ça.

                          Par contre ta condition marche robin.

                          Du coup au diable les overlays, je comprendrai un jour comment ça marche (oui comme ça en me réveillant un matin, la science infuse)

                          En tout cas merci à tous deux d’avoir passé un peu de votre temps sur ce post ^^

                          Edit:
                          Euh apparement mettre ta condition semble aussi résoudre mon problème d’overlay (et de transparence en fait), c’est parfait Oo

                          1 réponse Dernière réponse Répondre Citer 0
                          • FolganskyF Hors-ligne
                            Folgansky Correcteurs
                            dernière édition par

                            J’aurais juste une dernière question du coup, concernant les paramètres.

                            Je fais comme ça actuellement:

                            
                            Minecraft minecraft = FMLClientHandler.instance().getClient();
                            ScaledResolution scaledresolution = new ScaledResolution(minecraft, minecraft.displayWidth, minecraft.displayHeight);
                            int i = scaledresolution.getScaledWidth() - 90;
                            int j = scaledresolution.getScaledHeight() - 10;
                            

                            Le soucis c’est que la position du String n’est pas la même en réduisant la taille de la fenêtre de jeu.
                            Comment remplacer les “moins quelquechose” pour que ce soit toujours placé au même endroit sur l’écran, peu importe la taille de la fenêtre de jeu, svp?

                            Edit:
                            Par exemple j’ai essayé comme ça:

                            int i = scaledresolution.getScaledWidth() * (92/100);
                            int j = scaledresolution.getScaledHeight() * (98/100);
                            

                            Visiblement cette triche sur le int ne plaît pas.
                            Au final le String se loge en PLS dans le coin en haut à gauche de l’écran au lieu d’aller tranquille dans le coin opposé en mode “no stress”.

                            1 réponse Dernière réponse Répondre Citer 0
                            • robin4002R Hors-ligne
                              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                              dernière édition par

                              Déjà utilise event.resolution au lieu de faire une nouvelle instance de ScaledResolution.

                              Si tu veux mettre le string en haut à droite il faut prendre la largeur de l’écran moins le décalage (5 ou 10) moins la largeur du texte. Il y a une fonction dans FontRenderer pour avoir la largeur du texte.

                              1 réponse Dernière réponse Répondre Citer 0
                              • FolganskyF Hors-ligne
                                Folgansky Correcteurs
                                dernière édition par

                                Le soucis c’est justement le décalage.

                                Des deux affichages, la seule différence c’est la taille de la fenêtre de jeu.
                                Donc est-ce que c’est le paramètrage par défaut qui veut ça?
                                Donc on ne pourrait rien y faire et les joueurs, qui joueraient en écran réduit, pourraientt avoir des superpositions de rendus

                                Edit: Et ouki pour le event.resolution

                                1 réponse Dernière réponse Répondre Citer 0
                                • robin4002R Hors-ligne
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                  dernière édition par

                                  Suffit d’adapter le décalage en fonction de la largeur alors.

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • FolganskyF Hors-ligne
                                    Folgansky Correcteurs
                                    dernière édition par

                                    Eh bien je définis la largeur avec:

                                    
                                    int i =  event.resolution.getScaledWidth() - 90;
                                    int j =  event.resolution.getScaledHeight() - 10;
                                    

                                    Sauf que justement si je suis en fenêtre réduite le -90 fera plus de décalage que si je me mets en plein écran.
                                    Aucun moyen que le décalage soit proportionnel également?

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • robin4002R Hors-ligne
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                      dernière édition par

                                      Envoies moi ton code complet. Car ton i et ton j je ne sais pas ce que tu en fais x)

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • FolganskyF Hors-ligne
                                        Folgansky Correcteurs
                                        dernière édition par

                                        La classe est longue et redondante mais voici un bout où on voit ce que tu me demandes:

                                        @SubscribeEvent
                                            public void renderGameOverlayEvent(RenderGameOverlayEvent event)
                                            {    
                                                 String str;
                                                  int i =  event.resolution.getScaledWidth() - 90;
                                                 int j =  event.resolution.getScaledHeight() - 10;
                                        […]
                                         if (event.type == RenderGameOverlayEvent.ElementType.TEXT && itemstack != null && itemstack.getItem() == ModPg2.itemPlasmaGun && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && Minecraft.getMinecraft().currentScreen == null)
                                                 {        
                                                     if(itemstack.getTagCompound().getInteger("timerTir") >= 0 && itemstack.getTagCompound().getInteger("timerTir") <= 150)
                                                     {
                                                         str = EnumChatFormatting.DARK_GREEN + String.valueOf(itemstack.getTagCompound().getInteger("timerTir") + "/150");
                                                         Minecraft.getMinecraft().fontRenderer.drawString(str, i, j, 0);    
                                                     }
                                        […]
                                        
                                        
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • robin4002R Hors-ligne
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                          dernière édition par

                                          @SubscribeEvent
                                          public void renderGameOverlayEvent(RenderGameOverlayEvent event)
                                          {
                                          String str;
                                          int i = event.resolution.getScaledWidth() - 10;
                                          int j = event.resolution.getScaledHeight() - 10;
                                          […]
                                          if (event.type == RenderGameOverlayEvent.ElementType.TEXT && itemstack != null && itemstack.getItem() == ModPg2.itemPlasmaGun && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && Minecraft.getMinecraft().currentScreen == null)
                                          {
                                          if(itemstack.getTagCompound().getInteger("timerTir") >= 0 && itemstack.getTagCompound().getInteger("timerTir") <= 150)
                                          {
                                          str = EnumChatFormatting.DARK_GREEN + String.valueOf(itemstack.getTagCompound().getInteger("timerTir") + "/150");
                                          Minecraft.getMinecraft().fontRenderer.drawString(str, i - Minecraft.getMinecraft().fontRenderer.getStringWidth(str), j, 0);
                                          }
                                          […]
                                          
                                          

                                          Si getStringWidth ne fonctionne pas c’est getStringLenth.

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • FolganskyF Hors-ligne
                                            Folgansky Correcteurs
                                            dernière édition par

                                            Oui je vois, ça met bien le texte dans le coin même si sa taille pourrait le faire dépasser de l’écran.

                                            Sauf que j’aimerais centrer le texte sous la barre de chargement de l’arme (entre les deux traits vert, différents overlays se succèdent pour indiquer l’état de charge.)

                                            Bref, laisser le string dans un coin n’est pas pratique pour la fonction qu’il doit remplir.
                                            Même si cette fonction qui récupère la taille du texte est pratique et que toute personne intéressée par le sujet devrait la retenir

                                            Edit: Ce que je ne comprend pas, c’est pourquoi il n’y a pas de fonction qui récupère la taille réelle de la fenêtre de jeu.

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB