• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Code pour bouton possédant une texture

    1.7.x
    1.7.x
    3
    11
    2826
    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.
    • Deleted
      Deleted dernière édition par

      Salut tout le monde
      J’ai un problème depuis maintenant un bon moment. J’aimerai mettre une texture custom à un bouton, j’ai pris exemple sur le bouton de langue mais en jeux mon bouton n’est rendu qu’a moitié, j’ai pourtant bien mis les mêmes dimensions dans eclipse que sur mon image !
      Voici mon code :

      
      package mrplaigon.zombarcraft.customgui.client;
      
      import mrplaigon.zombarcraft.customgui.common.CustomGuiMod;
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.gui.GuiButton;
      import net.minecraft.util.ResourceLocation;
      
      import org.lwjgl.opengl.GL11;
      
      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      
      @SideOnly(Side.CLIENT)
      public class CustomButton extends GuiButton
      {
      
          public CustomButton(int p_i1041_1_, int p_i1041_2_, int p_i1041_3_)
          {
              super(p_i1041_1_, p_i1041_2_, p_i1041_3_, 20, 20, "");
          }
      
          /**
           * Draws this button to the screen.
           */
          public void drawButton(Minecraft p_146112_1_, int p_146112_2_, int p_146112_3_)
          {
              if (this.visible)
              {
                  p_146112_1_.getTextureManager().bindTexture(new ResourceLocation(CustomGuiMod.MODID, "textures/gui/playButton.png"));
                  boolean flag = p_146112_2_ >= this.xPosition && p_146112_3_ >= this.yPosition && p_146112_2_ < this.xPosition + this.width && p_146112_3_ < this.yPosition + this.height;
                  int k = 200;
      
                  this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 0, this.width, this.height);
              }
          }
      }
      

      Merci d’avance =D

      1 réponse Dernière réponse Répondre Citer 0
      • isador
        isador Moddeurs confirmés Modérateurs dernière édition par

        quelle sont les dimensions de ton image?

        1 réponse Dernière réponse Répondre Citer 0
        • Deleted
          Deleted dernière édition par

          @‘isador34’:

          quelle sont les dimensions de ton image?

          20 x 20

          1 réponse Dernière réponse Répondre Citer 0
          • isador
            isador Moddeurs confirmés Modérateurs dernière édition par

            Il faut des dimensions en puissance de deux: 1 2 4 8 16 32 64 etc….

            1 réponse Dernière réponse Répondre Citer 0
            • Deleted
              Deleted dernière édition par

              @‘isador34’:

              Il faut des dimensions en puissance de deux: 1 2 4 8 16 32 64 etc….

              Nan pas pour les boutons, et je suis sûr de ce que je dit car je me suis basé sur le bouton de language qui lui aussi a des dimensions de 20 x 20.

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

                Le fichier doit faire la taille d’un multiple de deux. Après dans ton fichier tu aura que 20x20 en couleur, le reste doit être en transparence.

                1 réponse Dernière réponse Répondre Citer 0
                • Deleted
                  Deleted dernière édition par

                  Sa ne marche toujours pas j’ai crée un .png de 32x32 et j’ai mis mon image de 20x20 en haut à gauche dans l’angle. De plus j’ai bien mis 20x20 et j’ai bien refresh le projet mais rien à faire c’est toujours buggé. Si vous souhaitez les classes ou le fichier.png dites le moi

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

                    Envoie directement ton dossier src en mp, je fais regarde ça. Mais à mon avis faudrait plutôt une texture 256x256, c’est ce que Minecraft utilise il me semble.


                    Du-coup j’ai reprit le code de base mc :

                    ​package mrplaigon.zombarcraft.customgui.client;
                    
                    import mrplaigon.zombarcraft.customgui.common.CustomGuiMod;
                    import net.minecraft.client.Minecraft;
                    import net.minecraft.client.gui.FontRenderer;
                    import net.minecraft.client.gui.GuiButton;
                    import net.minecraft.client.renderer.OpenGlHelper;
                    import net.minecraft.util.ResourceLocation;
                    
                    import org.lwjgl.opengl.GL11;
                    
                    import cpw.mods.fml.relauncher.Side;
                    import cpw.mods.fml.relauncher.SideOnly;
                    
                    @SideOnly(Side.CLIENT)
                    public class CustomButton extends GuiButton
                    {
                    
                        public CustomButton(int id, int x, int y)
                        {
                            super(id, x, y, 20, 20, "");
                        }
                    
                        public void drawButton(Minecraft mc, int x, int y)
                        {
                            if (this.visible)
                            {
                                FontRenderer fontrenderer = mc.fontRenderer;
                                mc.getTextureManager().bindTexture(new ResourceLocation(CustomGuiMod.MODID, "textures/gui/test.png"));
                                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                                this.field_146123_n = x >= this.xPosition && y >= this.yPosition && x < this.xPosition + this.width && y < this.yPosition + this.height;
                                int k = this.getHoverState(this.field_146123_n);
                                System.out.println(k);
                                GL11.glEnable(GL11.GL_BLEND);
                                OpenGlHelper.glBlendFunc(770, 771, 1, 0);
                                GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
                                this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + k * 20, this.width / 2, this.height);
                                this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2, 46 + k * 20, this.width / 2, this.height);
                                this.mouseDragged(mc, x, y);
                                int l = 14737632;
                    
                                if (packedFGColour != 0)
                                {
                                    l = packedFGColour;
                                }
                                else if (!this.enabled)
                                {
                                    l = 10526880;
                                }
                                else if (this.field_146123_n)
                                {
                                    l = 16777120;
                                }
                    
                                this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, l);
                            }
                        }
                    }
                    

                    Et la texture de mc modifiée :
                    http://i.imgur.com/QrJorgY.png

                    Pour le fonctionnement :
                    En fait le bouton est draw en deux morceaux :
                                this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + k * 20, this.width / 2, this.height);
                                this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2, 46 + k * 20, this.width / 2, this.height);
                    La première ligne fait la première moitié du bouton, celle de gauche. On commence donc au coordonné du bouton (this.xPosition, this.yPosition) le premier 0 c’est la coordonné x dans le fichier de texture, 46 + k * 20 c’est la coordonné y (k vaut 0 si le bouton est off, 1 si il est activé mais que la souris n’est pas dessus et 2 si il est activé et que la souris est dessus). Si tu compares avec le fichier de texture le 46 correspond aux autres textures qui sont au dessus, donc si tu vire les cases d’inventaire et que tu mets les boutons tout en haut du fichier de texture il faudra enlever ce 46. Ensuite on précise sur combien de pixel on affiche (ici this.width / 2, this.height, donc sur toute la hauteur du bouton et sur la moitié de la largeur).
                    La deuxième ligne c’est le même principe mais pour la moitié de droite, donc les coordonnés changent.

                    1 réponse Dernière réponse Répondre Citer 1
                    • Deleted
                      Deleted dernière édition par

                      Merci beaucoup Robin mais y’a pas moyen que je fasse ça dans une texture individuelle car j’ai masse boutons à rajouter et y’en a seront bien + gros que 20x20 et ça ne tiendra jamais là dedans. Je peux pas faire ça autre part ? Le mod thirst mod il rajoute une barre de soif, c’est le même principe ?

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

                        ça fonctionne avec des fichiers de 256x256, je ne sais pas pour le reste. Après tu peux très bien faire un fichier par bouton, mais regrouper éviterai de charger 50 fichier.

                        1 réponse Dernière réponse Répondre Citer 0
                        • Deleted
                          Deleted dernière édition par

                          @‘robin4002’:

                          ça fonctionne avec des fichiers de 256x256, je ne sais pas pour le reste. Après tu peux très bien faire un fichier par bouton, mais regrouper éviterai de charger 50 fichier.

                          Ok je vais essayer de faire une texture de 256 x 256 et de placer un de mes boutons dedans. Ensuite je me servirai de tes explications sur la méthode pour draw, si j’ai des questions je n’hésiterai pas comme d’habitude xD

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

                          MINECRAFT FORGE FRANCE © 2018

                          Powered by NodeBB