Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED Code pour bouton possédant une texture

    1.7.x
    1.7.x
    3
    11
    2736
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Deleted
      Deleted last edited by

      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 😃

      1 Reply Last reply Reply Quote 0
      • isador
        isador Moddeurs confirmés Modérateurs last edited by

        quelle sont les dimensions de ton image?

        1 Reply Last reply Reply Quote 0
        • Deleted
          Deleted last edited by

          @‘isador34’:

          quelle sont les dimensions de ton image?

          20 x 20

          1 Reply Last reply Reply Quote 0
          • isador
            isador Moddeurs confirmés Modérateurs last edited by

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

            1 Reply Last reply Reply Quote 0
            • Deleted
              Deleted last edited by

              @‘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 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                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 Reply Last reply Reply Quote 0
                • Deleted
                  Deleted last edited by

                  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 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                    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 Reply Last reply Reply Quote 1
                    • Deleted
                      Deleted last edited by

                      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 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                        ç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 Reply Last reply Reply Quote 0
                        • Deleted
                          Deleted last edited by

                          @‘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 Reply Last reply Reply Quote 0
                          • 1 / 1
                          • First post
                            Last post
                          Design by Woryk
                          Contact / Mentions Légales / Faire un don

                          MINECRAFT FORGE FRANCE © 2018

                          Powered by NodeBB