Modifier les Boutons



  • bonjour, alors voici mon problème je voudrait que les bouton du menue principale soit "transparent" donc j'ai modifier la texture des widget et j'ai gommer l'endroit des bouton donc cela donne:

    http://www.noelshack.com/2015-48-1448813386-widgetscustom.png

    et j'ai crée une class GuiCustomButton :

    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import fr.burning.lfc.LaFrenchCraftMOD;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.audio.PositionedSoundRecord;
    import net.minecraft.client.audio.SoundHandler;
    import net.minecraft.client.gui.FontRenderer;
    import net.minecraft.client.gui.Gui;
    import net.minecraft.client.renderer.OpenGlHelper;
    import net.minecraft.util.ResourceLocation;
    import org.lwjgl.opengl.GL11;
    
    @SideOnly(Side.CLIENT)
    public class GuiCustomButton extends Gui
    {
        protected static final ResourceLocation buttonTextures = new ResourceLocation("modid", "textures/gui/widgetsCustom.png");
        /** Button width in pixels */
        protected int width;
        /** Button height in pixels */
        protected int height;
        /** The x position of this control. */
        public int xPosition;
        /** The y position of this control. */
        public int yPosition;
        /** The string displayed on this control. */
        public String displayString;
        public int id;
        /** True if this control is enabled, false to disable. */
        public boolean enabled;
        /** Hides the button completely if false. */
        public boolean visible;
        protected boolean field_146123_n;
        private static final String __OBFID = "CL_00000668";
        public int packedFGColour;
    
        public GuiCustomButton(int par1, int par2, int par3, String par4Str)
        {
            this(par1, par2, par3, 200, 20, par4Str);
        }
    
        public GuiCustomButton(int par1, int par2, int par3, int par4, int par5, String par6Str)
        {
            this.width = 200;
            this.height = 20;
            this.enabled = true;
            this.visible = true;
            this.id = par1;
            this.xPosition = par2;
            this.yPosition = par3;
            this.width = par4;
            this.height = par5;
            this.displayString = par6Str;
        }
    
        /**
         * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over
         * this button.
         */
        protected int getHoverState(boolean p_146114_1_)
        {
            byte b0 = 1;
    
            if (!this.enabled)
            {
                b0 = 0;
            }
            else if (p_146114_1_)
            {
                b0 = 2;
            }
    
            return b0;
        }
    
        /**
         * Draws this button to the screen.
         */
        public void drawButton(Minecraft p_146112_1_, int p_146112_2_, int p_146112_3_)
        {
            if (this.visible)
            {
                FontRenderer fontrenderer = p_146112_1_.fontRenderer;
                p_146112_1_.getTextureManager().bindTexture(buttonTextures);
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                this.field_146123_n = 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 = this.getHoverState(this.field_146123_n);
                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(p_146112_1_, p_146112_2_, p_146112_3_);
                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);
            }
        }
    
        /**
         * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e).
         */
        protected void mouseDragged(Minecraft p_146119_1_, int p_146119_2_, int p_146119_3_) {}
    
        /**
         * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e).
         */
        public void mouseReleased(int p_146118_1_, int p_146118_2_) {}
    
        /**
         * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent
         * e).
         */
        public boolean mousePressed(Minecraft p_146116_1_, int p_146116_2_, int p_146116_3_)
        {
            return this.enabled && this.visible && p_146116_2_ >= this.xPosition && p_146116_3_ >= this.yPosition && p_146116_2_ < this.xPosition + this.width && p_146116_3_ < this.yPosition + this.height;
        }
    
        public boolean func_146115_a()
        {
            return this.field_146123_n;
        }
    
        public void func_146111_b(int p_146111_1_, int p_146111_2_) {}
    
        public void func_146113_a(SoundHandler p_146113_1_)
        {
            p_146113_1_.playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
        }
    
        public int getButtonWidth()
        {
            return this.width;
        }
    }
    

    mais cela ne marche pas 😞



  • Les simples "copier-coller" ne marchent pas, il faut connaître un peu :

    • dans le resource location il faut remplacer modid par ton modid
    • l'OBFID ne sert à rien
    • Je ne vois plus du tout les boutons sur la texture
    • il faut activer la transparence lorsque l'on dessine le bouton


  • @'SCAREX':

    Les simples "copier-coller" ne marchent pas, il faut connaître un peu :

    • dans le resource location il faut remplacer modid par ton modid
    • l'OBFID ne sert à rien
    • Je ne vois plus du tout les boutons sur la texture
    • il faut activer la transparence lorsque l'on dessine le bouton

    Oui je sais qu'il faut metre le modid sur mon code il y ai j'ai marquer modid pour que vous ssacher a quoi sa correspond ^^

    Et quand j'ai editer l'image sur photoshop il y a bien la transparence ^^



  • Si t'es boutons sont mapper dans le fichier de la texture, n'importe comment faudrait penser à regarder là non ?

    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);
    

    Car tout dépend de la position de tes boutons dans l'atlas…

    Comprenez un peu le code avant de faire n'importe quoi voyons.



  • @'ZeAmateis':

    Si t'es boutons sont mapper dans le fichier de la texture, n'importe comment faudrait penser à regarder là non ?

    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);
    

    Car tout dépend de la position de tes boutons dans l'atlas…

    Comprenez un peu le code avant de faire n'importe quoi voyons.

    heuu j'ai pas tout compris ^^



  • @'ZeAmateis':

    Si t'es boutons sont mapper dans le fichier de la texture, n'importe comment faudrait penser à regarder là non ?

    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);
    

    Car tout dépend de la position de tes boutons dans l'atlas…

    Comprenez un peu le code avant de faire n'importe quoi voyons.

    Heuu, desoler j'ai pas compris se que tu veut dire  ^^


  • Rédacteurs

    Bah cette fonction affiche la portion de texture à l'endroit où on veut, en gros avec les bonnes valeurs, si tes boutons sont sur ta texture t'as juste à mettre leurs coordonnées x et y en premier argument puis en troisième et quatrième arguments l'endroit où tu veux les afficher et en sixième et septième la taille des boutons



  • Exact.



  • Ha ok ^^ , Merci je vais regarder sa samedis et je repasse pour vous dire 🙂



  • merci les bouton marche bien mais j'ai un autre soucis quand le jeu est en "petite fenetre" les bouton son mal placer alors que quand le jeu est en "plein ecrans" les bouton son au bon endroit une idee pour que la position des bouton s'adapte en fonction de la fenetre ?



  • Joue en debug et adapte les positions en fonction des 2 variables (de la classe du Gui) width et height



  • si je joue avec ces 2 variable les bouton vont changer de place en petite fenêtre et plein écrans.

    Je m'explique car j'avoue que c'est pas très clair XD:

    Quand je suis en plein écran mes bouton son a la bonne place :

    http://www.noelshack.com/2015-49-1449347539-pleinecran.png

    Alors que quand je suis en "petite fenêtre" les bouton son mal placer :

    http://www.noelshack.com/2015-49-1449347541-petitecran.png

    je voudrait que les bouton se cadre automatiquement par rapport a la taille de la fenetre pour que les bouton soie toujours bien placer comme en plein écran 🙂



  • Non il seront à la bonne place proportionnellement à la taille de la fenêtre. Si tu ne me crois pas, regarde le code du GuiMainMenu de MC, ils font comme ça !



  • @'Plaigon':

    Non il seront à la bonne place proportionnellement à la taille de la fenêtre. Si tu ne me crois pas, regarde le code du GuiMainMenu de MC, ils font comme ça !

    je vient de tester avec le bouton option je l'ai crée comme ceci :

    int i = this.height / 4 + 48;
    
    this.buttonList.add(new GuiButton(0, this.width / 2 + 110,  i + 6, 98, 20,("Options")));
    

    j'ai donc changer les valeur qui se trouve a la place de  "2+110" pour la position en longeur et j'ai changer la valeur qui se trouve a  "6" pour la hauteur

    mais cela ne marche toujours pas.

    es que tu me parlais bien de sa ou je suis a côter de la plaque ^^?


  • Administrateurs

    Les boutons de MC sont positionnés en fonction du centre. Comme ils sont placé au centre cette façon de faire est efficace.
    Toi tu cherche à positionner les boutons vers la droite. Du-coup si tu te base sur le centre ça ne fonctionne pas très bien.
    Il faudrait plutôt se baser sur les 3/4 (depuis la gauche) de la fenêtre. (donc this.width / 4 * 3)



  • @'robin4002':

    Les boutons de MC sont positionnés en fonction du centre. Comme ils sont placé au centre cette façon de faire est efficace.
    Toi tu cherche à positionner les boutons vers la droite. Du-coup si tu te base sur le centre ça ne fonctionne pas très bien.
    Il faudrait plutôt se baser sur les 3/4 (depuis la gauche) de la fenêtre. (donc this.width / 4 * 3)

    Merci c'est parfait 🙂  .

    par contre j'ai une dernière question au niveau des boutons ^^

    es que cela est possible de changer la police d’écriture des boutons ? (j'ai regarder dans ma classe du bouton mais rien trouver par rapport au écriture)


  • Rédacteurs

    Normal, l'écriture est rendu par rapport à une texture contenant les caractères



  • @'BrokenSwing':

    Normal, l'écriture est rendu par rapport à une texture contenant les caractères

    Merci, je passe en resolus 😛