MFF

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

    [1.7.10] Comment crée un bouton custom ? [GUI]

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    11 Messages 2 Publieurs 1.1k 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Salut,
      En créant une classe qui hérite de GuiButton.
      Et ensuite pour changer le style du bouton il faut override la fonction de draw.

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

        Merci, comment peut-on utiliser la méthode drawButton dans une classe qui hérite de GuiScreen ?

        Voici ma classe :

        
        public class G extends GuiScreen {
        	
        	
        	int guiWidth = 220;
        	int guiHeight = 180;
        	
        	int guiX = (width - guiWidth) / 2;
        	int guiY = (height - guiHeight) / 2;
        	
        	int tabWidth = 60;
        	int tabHeight = 30;
        
        	GuiButton testButton;
        	
        	String text = "";
        
        	@Override
        	public void drawScreen(int x, int y, float ticks) {
        		
        		int guiX = (width - guiWidth) / 2;
        		int guiY = (height - guiHeight) / 2;
        
        		GL11.glColor4f(1, 1, 1, 1);
        		drawDefaultBackground(); 
        
        		mc.renderEngine.bindTexture(new ResourceLocation(Reference.MODID, "textures/gui/test.png"));
        		drawTexturedModalRect(guiX, guiY, 0, 0, guiWidth, guiHeight);
        		drawTexturedModalRect(guiX + 1, guiY + 125, 0, 187, tabWidth, tabHeight);
        		GL11.glPushMatrix();
        		GL11.glScaled(1.2, 1.2, 1.0);
        		fontRendererObj.drawString("GUI", guiX + 129, guiY + 5, 0x404040);
        		fontRendererObj.drawString(text, guiX + 17, guiY + 50, 16747796);
        		GL11.glPopMatrix(); 
        		GL11.glColor4f(1, 1, 1, 1);
        		mc.renderEngine.bindTexture(new ResourceLocation(Reference.MODID, "textures/gui/bouton.png"));
        		drawTexturedModalRect(guiX + 160, guiY + 50, 0, 0, tabWidth, tabHeight + 50);
        		super.drawScreen(x, y, ticks);  
        	}
        
        	@Override
        	public void initGui() { 
        
        		int guiX = (width - guiWidth) / 2;
        		int guiY = (height - guiHeight) / 2;
        		
        		buttonList.clear();
        		buttonList.add(testButton = new GuiButton(0,guiX + 15,guiY + 130,40,20, "Test"));
        		super.initGui();
        	}	
        
        	@Override
        	protected void actionPerformed(GuiButton button) {  
        		switch(button.id) {
        		case 0:
        			button.displayString = "Activé";
        			button.enabled = false;
        			text = "Hello World !";
        		}
        		super.actionPerformed(button);
        	}
        
        
        	@Override
        	protected void keyTyped(char c, int key) { 
        		switch(key) {
        		case Keyboard.KEY_C:
        			mc.displayGuiScreen(null);
        		}
        		
        		super.keyTyped(c, key);
        	}
        	
        
        }
        

        ♦ Développeur Java ♦

        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

          Il n’y a pas de méthode drawButton, c’est la méthode drawScreen qu’il faut utiliser.

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

            Ok, comment on change le style du bouton ?

            ♦ Développeur Java ♦

            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

              En changeant la texture qui est bind dans la fonction drawScreen.

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

                Ok, mais comment peut-on dire que la texture qui est bind dans la fonction drawScreen est un bouton ?

                ♦ Développeur Java ♦

                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 robin4002

                  Comment ça dire que c’est un bouton ? Une texture c’est une texture …

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

                    Lorsque je clic sur le cercle rouge (= bouton custom) , ça marche mais je peux aussi cliquer à côté et ça marche également, comment peut-on faire pour que le bouton marche que lorsqu’on clique dans le cercle rouge…

                    public class G extends GuiScreen {
                    
                    	
                    	int guiWidth = 220;
                    	int guiHeight = 180;
                    	
                    	int guiX = (width - guiWidth) / 2;
                    	int guiY = (height - guiHeight) / 2;
                    	
                    	int tabWidth = 60;
                    	int tabHeight = 30;
                    
                    	GuiButton testButton, customButton;
                    	
                    	String text = "";
                    
                    	@Override
                    	public void drawScreen(int x, int y, float ticks) {
                    		
                    		int guiX = (width - guiWidth) / 2;
                    		int guiY = (height - guiHeight) / 2;
                    
                    		GL11.glColor4f(1, 1, 1, 1);
                    		drawDefaultBackground(); 
                    
                    		mc.renderEngine.bindTexture(new ResourceLocation(Reference.MODID, "textures/gui/test.png"));
                    		drawTexturedModalRect(guiX, guiY, 0, 0, guiWidth, guiHeight);
                    		drawTexturedModalRect(guiX + 1, guiY + 125, 0, 187, tabWidth, tabHeight);
                    		GL11.glPushMatrix();
                    		GL11.glScaled(1.2, 1.2, 1.0);
                    		fontRendererObj.drawString("GUI", guiX + 129, guiY + 5, 0x404040);
                    		fontRendererObj.drawString(text, guiX + 17, guiY + 50, 16747796);
                    		GL11.glPopMatrix(); 
                    		GL11.glColor4f(1, 1, 1, 1);
                    		super.drawScreen(x, y, ticks);  
                    		
                    	}
                    
                    	@Override
                    	public void initGui() { 
                    
                    		int guiX = (width - guiWidth) / 2;
                    		int guiY = (height - guiHeight) / 2;
                    		
                    		buttonList.clear();
                    		buttonList.add(testButton = new GuiButton(0,guiX + 15,guiY + 130,40,20, "Test"));
                    		buttonList.add(customButton = new CustomButton(1, guiX + 15, guiY + 155, 40,20, ""));
                    		super.initGui();
                    	}	
                    
                    	@Override
                    	protected void actionPerformed(GuiButton button) {  
                    		switch(button.id) {
                    		case 0:
                    			button.displayString = "Activé";
                    			button.enabled = false;
                    			text = "Hello World !";
                    		case 1:
                    			button.displayString = "CustomButton";
                    		}
                    		super.actionPerformed(button);
                    	}
                    
                    
                    	@Override
                    	protected void keyTyped(char c, int key) { 
                    		switch(key) {
                    		case Keyboard.KEY_C:
                    			mc.displayGuiScreen(null);
                    		}
                    		
                    		super.keyTyped(c, key);
                    	}
                    	
                    
                    protected static final ResourceLocation customTexture = new ResourceLocation(Reference.MODID, "textures/gui/bouton.png");
                    	 
                    
                    	public CustomButton(int p_i1021_1_, int p_i1021_2_, int p_i1021_3_, int p_i1021_4_, int p_i1021_5_,
                    			String p_i1021_6_) {
                    		super(p_i1021_1_, p_i1021_2_, p_i1021_3_, p_i1021_4_, p_i1021_5_, p_i1021_6_);
                    	}
                    	
                    	  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(customTexture);
                    	            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 + 10, this.yPosition,15, 20, this.width - 20, this.height + 5);
                    	            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);
                    	        }
                    	    }
                    
                    

                    ♦ Développeur Java ♦

                    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

                      Le code de Minecraft n’est pas fait pour gérer des formes autres que des rectangles.

                      Pour gérer le cas d’un cercle il faudrait modifier la logique du clic et utiliser un peu de mathématique pour déterminer si le clic est dans le cercle ou non.

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

                        Ah ok, merci.

                        ♦ Développeur Java ♦

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

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB