Problème Affichage Guimainmenu



  • Bonjour j'ai suivi le tuto de Robin sur les gui main menu

    Mais j'ai un soucis mais bouton ce déplace par rapport au fond d’écran de mon gui lors que je redimensionne ma fenêtre.

    Voici ma classe en question

    @SideOnly(Side.CLIENT)
    public class Guicustommainmenu extends GuiScreen
    implements GuiYesNoCallback
    {
    private static final Logger logger = LogManager.getLogger();
    private static final Random rand = new Random();
    private float updateCounter;
    private String splashText;
    private GuiButton buttonResetDemo;
    private int panoramaTimer;
    private DynamicTexture viewportTexture;
    private final Object field_104025_t = new Object();
    private String field_92025_p;
    private String field_146972_A;
    private String field_104024_v;
    private static final ResourceLocation splashTexts = new ResourceLocation("texts/splashes.txt");
    private static final ResourceLocation minecraftTitleTextures = new ResourceLocation("TutoMod:textures/gui/mainmenu.png");
    private final ResourceLocation backGround = new ResourceLocation("TutoMod:textures/gui/mainmenu/mainmenu2.png");
    public static final String field_96138_a = "Please click " + EnumChatFormatting.UNDERLINE + "here" + EnumChatFormatting.RESET + " for more information.";
    private int field_92024_r;
    private int field_92023_s;
    private int field_92022_t;
    private int field_92021_u;
    private int field_92020_v;
    private int field_92019_w;
    private ResourceLocation field_110351_G;
    private static final String __OBFID = "CL_00001154";
    
    public Guicustommainmenu()
    {
     this.field_146972_A = field_96138_a;
     this.splashText = "missingno";
     BufferedReader bufferedreader = null;
     try
     {
       ArrayList arraylist = new ArrayList();
       bufferedreader = new BufferedReader(new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(splashTexts).getInputStream(), Charsets.UTF_8));
       String s;
       while ((s = bufferedreader.readLine()) != null)
       {
         s = s.trim();
         if (!s.isEmpty()) {
           arraylist.add(s);
         }
       }
       if (!arraylist.isEmpty()) {
         do
         {
           this.splashText = ((String)arraylist.get(rand.nextInt(arraylist.size())));
         } while (this.splashText.hashCode() == 125780783);
       }
       if (bufferedreader != null) {
         try
         {
           bufferedreader.close();
         }
         catch (IOException localIOException) {}
       }
       this.updateCounter = rand.nextFloat();
     }
     catch (IOException localIOException1) {}finally
     {
       if (bufferedreader != null) {
         try
         {
           bufferedreader.close();
         }
         catch (IOException localIOException3) {}
       }
     }
     this.field_92025_p = "";
     if ((!GLContext.getCapabilities().OpenGL20) && (!OpenGlHelper.func_153193_b()))
     {
       this.field_92025_p = I18n.format("title.oldgl1", new Object[0]);
       this.field_146972_A = I18n.format("title.oldgl2", new Object[0]);
       this.field_104024_v = "https://help.mojang.com/customer/portal/articles/325948?ref=game";
     }
    }
    
    public void updateScreen()
    {
     this.panoramaTimer += 1;
    }
    
    public boolean doesGuiPauseGame()
    {
     return false;
    }
    
    protected void keyTyped(char p_73869_1_, int p_73869_2_) {}
    
    public void initGui()
    {
     this.viewportTexture = new DynamicTexture(256, 256);
     this.field_110351_G = this.mc.getTextureManager().getDynamicTextureLocation("background", this.viewportTexture);
     Calendar calendar = Calendar.getInstance();
     calendar.setTime(new Date());
     if ((calendar.get(2) + 1 == 11) && (calendar.get(5) == 9)) {
       this.splashText = "Happy birthday, ez!";
     } else if ((calendar.get(2) + 1 == 6) && (calendar.get(5) == 1)) {
       this.splashText = "Happy birthday, Notch!";
     } else if ((calendar.get(2) + 1 == 12) && (calendar.get(5) == 24)) {
       this.splashText = "Merry X-mas!";
     } else if ((calendar.get(2) + 1 == 1) && (calendar.get(5) == 1)) {
       this.splashText = "Happy new year!";
     } else if ((calendar.get(2) + 1 == 10) && (calendar.get(5) == 31)) {
       this.splashText = "OOoooOOOoooo! Spooky!";
     }
     boolean flag = true;
     int i = this.height / 4 + 48;
     if (this.mc.isDemo()) {
       addDemoButtons(i, 24);
     } else {
       addSingleplayerMultiplayerButtons(i, 24);
     }
     this.buttonList.add(new GuiButton(0, this.width / 2 - 100, i + 72 + 12, 98, 20, I18n.format("menu.options", new Object[0])));
     this.buttonList.add(new GuiButton(4, this.width / 2 + 2, i + 72 + 12, 98, 20, I18n.format("menu.quit", new Object[0])));
     this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, i + 72 + 12));
     Object object = this.field_104025_t;
     synchronized (this.field_104025_t)
     {
       this.field_92023_s = this.fontRendererObj.getStringWidth(this.field_92025_p);
       this.field_92024_r = this.fontRendererObj.getStringWidth(this.field_146972_A);
       int j = Math.max(this.field_92023_s, this.field_92024_r);
       this.field_92022_t = ((this.width - j) / 2);
       this.field_92021_u = (((GuiButton)this.buttonList.get(0)).yPosition - 24);
       this.field_92020_v = (this.field_92022_t + j);
       this.field_92019_w = (this.field_92021_u + 24);
     }
    }
    
    private void addSingleplayerMultiplayerButtons(int x, int y)
    {
     this.buttonList.add(new GuiButton(1, this.width / 2 - 100, x, 200, 20, I18n.format("menu.singleplayer", new Object[0])));
     this.buttonList.add(new GuiButton(20, this.width / 2 - 100, x + y * 1, "Multijoueur"));
     GuiButton webSiteButton = new GuiButton(21, this.width / 2 - 100, x + y * 2, "Chaine Youtube");
     GuiButton fmlModButton = new GuiButton(6, this.width / 2 - 100, x + y * 2, "Mods");
     fmlModButton.xPosition = (this.width / 2 + 2);
     webSiteButton.width = 98;
     fmlModButton.width = 98;
     this.buttonList.add(webSiteButton);
     this.buttonList.add(fmlModButton);
    }
    
    private void addDemoButtons(int x, int y)
    {
     this.buttonList.add(new GuiButton(11, this.width / 2 - 100, x, I18n.format("menu.playdemo", new Object[0])));
     this.buttonList.add(this.buttonResetDemo = new GuiButton(12, this.width / 2 - 100, x + y * 1, I18n.format("menu.resetdemo", new Object[0])));
     ISaveFormat isaveformat = this.mc.getSaveLoader();
     WorldInfo worldinfo = isaveformat.getWorldInfo("Demo_World");
     if (worldinfo == null) {
       this.buttonResetDemo.enabled = false;
     }
    }
    
    protected void actionPerformed(GuiButton button)
    {
     if (button.id == 0) {
       this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings));
     }
     if (button.id == 5) {
       this.mc.displayGuiScreen(new GuiLanguage(this, this.mc.gameSettings, this.mc.getLanguageManager()));
     }
     if (button.id == 1) {
       this.mc.displayGuiScreen(new GuiSelectWorld(this));
     }
     if (button.id == 2) {
       this.mc.displayGuiScreen(new GuiMultiplayer(this));
     }
     if (button.id == 4) {
       this.mc.shutdown();
     }
     if (button.id == 6) {
       this.mc.displayGuiScreen(new GuiModList(this));
     }
     if (button.id == 11) {
       this.mc.launchIntegratedServer("Demo_World", "Demo_World", DemoWorldServer.demoWorldSettings);
     }
     if (button.id == 12)
     {
       ISaveFormat isaveformat = this.mc.getSaveLoader();
       WorldInfo worldinfo = isaveformat.getWorldInfo("Demo_World");
       if (worldinfo != null)
       {
         GuiYesNo guiyesno = GuiSelectWorld.func_152129_a(this, worldinfo.getWorldName(), 12);
         this.mc.displayGuiScreen(guiyesno);
       }
     }
     if (button.id == 20)
     {
       FMLClientHandler.instance().setupServerList();
       FMLClientHandler.instance().connectToServer(this, new ServerData("Multijoueur", "localhost"));
     }
     if (button.id == 21) {
       try
       {
         Class oclass = Class.forName("java.awt.Desktop");
         Object object = oclass.getMethod("getDesktop", new Class[0]).invoke(null, new Object[0]);
         oclass.getMethod("browse", new Class[] { URI.class }).invoke(object, new Object[] { new URI("https://www.youtube.com/channel/UC7gcNpW72tICHQZQ1iJEHbA") });
       }
       catch (Throwable throwable)
       {
         logger.error("Couldn't open link", throwable);
       }
     }
    }
    
    public void confirmClicked(boolean p_73878_1_, int id)
    {
     if ((p_73878_1_) && (id == 12))
     {
       ISaveFormat isaveformat = this.mc.getSaveLoader();
       isaveformat.flushCache();
       isaveformat.deleteWorldDirectory("Demo_World");
       this.mc.displayGuiScreen(this);
     }
     else if (id == 13)
     {
       if (p_73878_1_) {
         try
         {
           Class oclass = Class.forName("java.awt.Desktop");
           Object object = oclass.getMethod("getDesktop", new Class[0]).invoke(null, new Object[0]);
           oclass.getMethod("browse", new Class[] { URI.class }).invoke(object, new Object[] { new URI(this.field_104024_v) });
         }
         catch (Throwable throwable)
         {
           logger.error("Couldn't open link", throwable);
         }
       }
       this.mc.displayGuiScreen(this);
     }
    }
    
    private void renderBackGround()
    {
     GL11.glViewport(0, 0, 256, 256);
     this.mc.getTextureManager().bindTexture(this.backGround);
     GL11.glDisable(3553);
     GL11.glEnable(3553);
     GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
     Tessellator tessellator = Tessellator.instance;
     tessellator.startDrawingQuads();
     GL11.glTexParameteri(3553, 10241, 9729);
     GL11.glTexParameteri(3553, 10240, 9729);
     tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
     int k = this.width;
     int l = this.height;
     tessellator.addVertexWithUV(0.0D, 0.0D, this.zLevel, 0.0D, 0.0D);
     tessellator.addVertexWithUV(0.0D, l, this.zLevel, 0.0D, 1.0D);
     tessellator.addVertexWithUV(k, l, this.zLevel, 1.0D, 1.0D);
     tessellator.addVertexWithUV(k, 0.0D, this.zLevel, 1.0D, 0.0D);
     tessellator.draw();
    }
    
    public void drawScreen(int x, int y, float partialTick)
    {
     GL11.glDisable(3008);
     renderBackGround();
     GL11.glEnable(3008);
     Tessellator tessellator = Tessellator.instance;
     short short1 = 274;
     int k = this.width / 2 - short1 / 2;
     byte b0 = 30;
     drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215);
     drawGradientRect(0, 0, this.width, this.height, 0, -2147483648);
     this.mc.getTextureManager().bindTexture(minecraftTitleTextures);
     GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
     if (this.updateCounter < 0.0001D)
     {
       drawTexturedModalRect(k + 0, b0 + 0, 0, 0, 99, 44);
       drawTexturedModalRect(k + 99, b0 + 0, 129, 0, 27, 44);
       drawTexturedModalRect(k + 99 + 26, b0 + 0, 126, 0, 3, 44);
       drawTexturedModalRect(k + 99 + 26 + 3, b0 + 0, 99, 0, 26, 44);
       drawTexturedModalRect(k + 155, b0 + 0, 0, 45, 155, 44);
     }
     else
     {
       drawTexturedModalRect(k + 0, b0 + 0, 0, 0, 155, 44);
       drawTexturedModalRect(k + 155, b0 + 0, 0, 45, 155, 44);
     }
     tessellator.setColorOpaque_I(-1);
     GL11.glPushMatrix();
     GL11.glTranslatef(this.width / 2 + 90, 70.0F, 0.0F);
     GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F);
     float f1 = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * 3.141593F * 2.0F) * 0.1F);
     f1 = f1 * 100.0F / (this.fontRendererObj.getStringWidth(this.splashText) + 32);
     GL11.glScalef(f1, f1, f1);
     drawCenteredString(this.fontRendererObj, this.splashText, 0, -8, -256);
     GL11.glPopMatrix();
     String s = "Minecraft 1.7.10";
     if (this.mc.isDemo()) {
       s = s + " Demo";
     }
     List <string>brandings = Lists.reverse(FMLCommonHandler.instance().getBrandings(true));
     for (int i = 0; i < brandings.size(); i++)
     {
       String brd = (String)brandings.get(i);
       if (!Strings.isNullOrEmpty(brd)) {
         drawString(this.fontRendererObj, brd, 2, this.height - (10 + i * (this.fontRendererObj.FONT_HEIGHT + 1)), 16777215);
       }
     }
     String s1 = "Copyright Mojang AB. Do not distribute!";
     drawString(this.fontRendererObj, s1, this.width - this.fontRendererObj.getStringWidth(s1) - 2, this.height - 10, -1);
     if ((this.field_92025_p != null) && (this.field_92025_p.length() > 0))
     {
       drawRect(this.field_92022_t - 2, this.field_92021_u - 2, this.field_92020_v + 2, this.field_92019_w - 1, 1428160512);
       drawString(this.fontRendererObj, this.field_92025_p, this.field_92022_t, this.field_92021_u, -1);
       drawString(this.fontRendererObj, this.field_146972_A, (this.width - this.field_92024_r) / 2, ((GuiButton)this.buttonList.get(0)).yPosition - 12, -1);
     }
     super.drawScreen(x, y, partialTick);
    }
    
    protected void mouseClicked(int p_73864_1_, int p_73864_2_, int p_73864_3_)
    {
     super.mouseClicked(p_73864_1_, p_73864_2_, p_73864_3_);
     Object object = this.field_104025_t;
     synchronized (this.field_104025_t)
     {
       if ((this.field_92025_p.length() > 0) && (p_73864_1_ >= this.field_92022_t) && (p_73864_1_ <= this.field_92020_v) && (p_73864_2_ >= this.field_92021_u) && (p_73864_2_ <= this.field_92019_w))
       {
         GuiConfirmOpenLink guiconfirmopenlink = new GuiConfirmOpenLink(this, this.field_104024_v, 13, true);
         guiconfirmopenlink.func_146358_g();
         this.mc.displayGuiScreen(guiconfirmopenlink);
       }
     }
    }
    }
    
    

    Merci d'avance</string>


  • Administrateurs

    Salut,
    Quel bouton se déplace ? Possible d'avoir un screenshot ?



  • Logiquement, il y a deux solutions à ton problème :
     - ne pas afficher l'image de fond à la taille de l'écran mais à une taille fixe et mettre un autre fond derrière ton image
     - changer la manière dont tu positionne les boutons en utilisant un pourcentage de la taille de l'écran:
        * pour la position en x : au lieux d'utiliser "this.width / 2 - 100" faire plutôt "this.width * 0.4f" (en changent 0.4 par d'autres valeurs entre 0.5 et 0, tu trouveras la valeur que tu veux)
        * pour la position en y : comme pour la position en x mais il faut utiliser this.height



  • Merci Beaucoup LeBossMax2 problème résolue.