1.7.10 Mauvaise taille de GUI



  • Plop 🙂

    Bon, voilà mon problème : le GUI de mon bloc est tout le temps affiché trop petit, du coup les slots sont au mauvais endroits et on ne voit qu'une partie du GUI. (mon image fait 176*188px mais j'ai l'impression que le jeu affiche l'image coupée à (100,100))

    #Classe GUITableAssembly :(Classe GUITableAssembly 🙂

    package sasukz.etheriam.common.gui.blocks;
    
    import net.minecraft.client.gui.inventory.GuiContainer;
    import net.minecraft.client.resources.I18n;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.inventory.IInventory;
    import net.minecraft.util.ResourceLocation;
    
    import org.lwjgl.opengl.GL11;
    
    import sasukz.etheriam.common.Etheriam;
    import sasukz.etheriam.common.blocks.tileentities.TETableAssembly;
    import sasukz.etheriam.common.gui.containers.ContTableAssembly;
    
    public class GUITableAssembly extends GuiContainer {
    private static final ResourceLocation texture = new ResourceLocation(
    Etheriam.MODID, "textures/gui/table_assembly.png");
    private TETableAssembly te;
    private IInventory pInv;
    
    public GUITableAssembly(TETableAssembly ta, InventoryPlayer inv) {
    super(new ContTableAssembly(ta, inv));
    te = ta;
    pInv = inv;
    allowUserInput = false;
    xSize = 176;
    ySize = 188;
    }
    
    @Override
    protected void drawGuiContainerBackgroundLayer(float prt, int x, int y) {
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    mc.getTextureManager().bindTexture(texture);
    int k = (width - xSize) / 2,
    l = (height - ySize) / 2;
    drawTexturedModalRect(k, l, 0, 0, xSize, ySize);
    }
    
    @Override
    protected void drawGuiContainerForegroundLayer(int x, int y) {
    String tileName = I18n.format(te.getInventoryName());
    fontRendererObj.drawString(tileName,
    (xSize - fontRendererObj.getStringWidth(tileName)) / 2, 6, 0);
    String invName = pInv.hasCustomInventoryName() ? pInv
    .getInventoryName() : I18n.format(pInv.getInventoryName());
    fontRendererObj.drawString(invName,
    (xSize - fontRendererObj.getStringWidth(invName)) / 2,
    ySize - 96, 0);
    }
    }
    

    Merci d'avance 😛



  • C'est l'image qui fait 176188 ou c'est ton fichier .png qui fait 176188 ? Quel est la taille de ton fichier (256x256, 512x512, etc) ?



  • @'SCAREX':

    C'est l'image qui fait 176188 ou c'est ton fichier .png qui fait 176188 ? Quel est la taille de ton fichier (256x256, 512x512, etc) ?

    Euh l'image c'est mon fichier .png ._.'



  • Ton fichier doit avoir comme taille une puissance de 2 : 128x128, 256x256, 512x512. Une fois fait, tu prend la taille de ton GUI à l'intérieur de l'image et tu regardes sa taille sur une base 256.

    EDIT : regarde cette image.

    0_1537563885589_explication GUI.png



  • Faut vraiment que ça soit une puissance de 2? Je pense pas vu qu'y'a ça dans la classe GuiContainer :

    /** The X size of the inventory window in pixels. */
    protected int xSize = 176;
    /** The Y size of the inventory window in pixels. */
    protected int ySize = 166;
    


  • Regarde le message au-dessus.

    Effectivement tu peux le mettre dans une autre taille mais ensuite la division sera plus difficile car il faut toujours le mettre sur une base 256. Sauf si ton GUI prend toute ton image, à ce moment là il faudra mettre this.xSize = 256 et this.ySize = 256.



  • Base 256? Wut?



  • La taille de l'image doit être une puissance de 2 : 128x128, 256x256, etc.

    Ensuite à l'intérieur tu y mets ta texture en mettant de la transparence autour de ta texture (Comme Minecraft : à gauche et en bas).

    Puis tu récupère la taille de ta texture en pixels. Si ton fichier fait du 256x256, tu peux garder la taille trouvée. En revanche si ton fichier fait du 512x512, alors il faudra diviser par 2, car 512 / 256 = 2.

    Une fois ces 2 tailles récupérées, tu les mets dans le constructeur de ton Gui : this.xSize et this.ySize.



  • Euh… ok.
    J'ai mis mon GUI sur une image en 256*256 avec fond transparent et ça a résolu le problème.
    Merci 🙂


Log in to reply