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



  • Bonjour, j'aimerais savoir comment crée un bouton custom [GUI].

    Merci de votre aide.


  • Moddeurs confirmés Rédacteurs Administrateurs

    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.



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

  • Moddeurs confirmés Rédacteurs Administrateurs

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



  • Ok, comment on change le style du bouton ?


  • Moddeurs confirmés Rédacteurs Administrateurs

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



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


  • Moddeurs confirmés Rédacteurs Administrateurs

    Comment ça dire que c'est un bouton ? Une texture c'est une texture ...



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

  • Moddeurs confirmés Rédacteurs Administrateurs

    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.



  • Ah ok, merci.


Log in to reply