Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED [1.7.10] Problème affichage GUI custom

    1.7.x
    1.7.10
    3
    11
    787
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      Cobra45 last edited by robin4002

      Bonjour,

      Je poste aujourd’hui afin d’espérer trouver une solution à mon problème.
      J’ai crée un GUI permettant d’afficher des informations sur un véhicule Flan’s Mod, celui-ci fonctionne très bien, aucun problème n’est à déplorer.

      Cependant, il y a un soucis sur l’affichage du menu en lui-même, c’est-à-dire qu’en fait le menu s’affiche avec un fond blanc que je ne pourrai expliquer (la texture est bien en .png et ne possède aucun fond).

      C’est assez inexplicable et à ce jour je n’ai trouvé encore aucune solution.
      Si quelqu’un pourrait me venir en aide.

      Ci-dessous, je poste le code correspondant en enlevant quelques parties, ainsi qu’une photo du menu en jeu.

      Merci d’avance.

      0_1531757166736_2018-07-16_18.05.16.png

      Code :

      package com.flansmod.client.gui;
      
      import (...)
      
      public class GuiDriveableController extends GuiScreen
      {
          private IControllable plane;
          private boolean leftMouseHeld;
          private boolean rightMouseHeld;
          private ArrayList<DriveablePart> partsToDraw = new ArrayList<DriveablePart>();
          private ArrayList<Integer> wheels = new ArrayList<Integer>();
      
          public GuiDriveableController(IControllable thePlane)
          {
              super();
              plane = thePlane;
              speedCacheTime = thePlane instanceof EntitySeat ? 0 : -1;
              if (thePlane instanceof EntitySeat) {
                  EntitySeat driving = (EntitySeat)thePlane;
              for(DriveablePart part : driving.driveable.getDriveableData().parts.values())
              {
                  //Check to see if the part is actually damageable
                  if(part.maxHealth > 0)
                  {
                      //Add it to the list of parts to draw
                      partsToDraw.add(part);
                      if (isWheel(part)) {
                          wheels.add(part.health);
                      }
                          
                  }
              }
              }
          }
      
          @Override
          public void initGui()
          {
              if(mc.gameSettings.thirdPersonView == 1)
                  mc.renderViewEntity = (plane.getCamera() == null ? mc.thePlayer : plane.getCamera());
          }
      
          @Override
          public void onGuiClosed()
          {
              mc.mouseHelper.ungrabMouseCursor();
              mc.renderViewEntity = mc.thePlayer;
          }
      
          @Override
          public void handleMouseInput()
          {
              EntityPlayer player = (EntityPlayer)plane.getControllingEntity();
              if(player != mc.thePlayer)
              {
                  mc.displayGuiScreen(null);
                  return;
              }
      
              int dWheel = Mouse.getDWheel();
              if(dWheel != 0)
              {
                  player.inventory.changeCurrentItem(dWheel);
              }
      
              // Right mouse. Fires shells, drops bombs. Is not a holding thing
              if(Mouse.isButtonDown(1))
                  plane.pressKey(8, player);
      
              if(!leftMouseHeld && Mouse.isButtonDown(0)) // Left mouse, for MGs. Is a holding thing
              {
                  leftMouseHeld = true;
                  plane.updateKeyHeldState(9, true);
              }
              if(leftMouseHeld && !Mouse.isButtonDown(0))
              {
                  leftMouseHeld = false;
                  plane.updateKeyHeldState(9, false);
              }
              if(!rightMouseHeld && Mouse.isButtonDown(1)) // Right mouse
              {
                  rightMouseHeld = true;
                  plane.updateKeyHeldState(8, true);
              }
              if(rightMouseHeld && !Mouse.isButtonDown(1))
              {
                  rightMouseHeld = false;
                  plane.updateKeyHeldState(8, false);
              }
          }
      
          @Override
          protected void keyTyped(char c, int i)
          {
              if(i == 1)
              {
                  mc.displayGuiScreen(null);
                  mc.displayInGameMenu();
              }
              if(i == 59)
              {
                  mc.gameSettings.hideGUI = !mc.gameSettings.hideGUI;
              }
              if(i == 61)
              {
                  mc.gameSettings.showDebugInfo = !mc.gameSettings.showDebugInfo;
              }
              if(i == 63)
              {
                  mc.gameSettings.thirdPersonView = (mc.gameSettings.thirdPersonView + 1) % 3;
                  if(mc.gameSettings.thirdPersonView == 1)
                      mc.renderViewEntity = (plane.getCamera() == null ? mc.thePlayer : plane.getCamera());
                  else
                      mc.renderViewEntity = mc.thePlayer;
              }
              if(i == 66)
              {
                  mc.gameSettings.smoothCamera = !mc.gameSettings.smoothCamera;
              }
              if(i == mc.gameSettings.keyBindInventory.getKeyCode())
              {
                  mc.displayGuiScreen(new GuiInventory(mc.thePlayer));
              }
              if(i == mc.gameSettings.keyBindDrop.getKeyCode())
              {
                  // mc.thePlayer.dropCurrentItem();
              }
              if(i == mc.gameSettings.keyBindChat.getKeyCode())
              {
                  mc.displayGuiScreen(new GuiChat());
              }
              if(i == mc.gameSettings.keyBindCommand.getKeyCode())
              {
                  mc.displayGuiScreen(new GuiChat("/"));
              }
              /*
               * if(i == KeyInputHandler.debugKey.getKeyCode())
               * {
               * FlansMod.DEBUG = !FlansMod.DEBUG;
               * }
               */
              if(i == KeyInputHandler.reloadModelsKey.getKeyCode())
              {
                  FlansModClient.reloadModels(false);
              }
              /*
               * else if(i == KeyInputHandler.enginePower.getKeyCode())
               * {
               * plane.pressKey(19, (EntityPlayer)plane.getControllingEntity());
               * }
               */
          }
      
          @Override
          public void updateScreen()
          {
              if(mc.gameSettings.thirdPersonView == 1)
                  mc.renderViewEntity = (plane.getCamera() == null ? mc.thePlayer : plane.getCamera());
      
              else
                  mc.renderViewEntity = mc.thePlayer;
      
              if(speedCacheTime != -1)
              {
                  {
                      lastCalculatedSpeed = calculateSpeed((EntitySeat)plane);
                  }
              }
          }
      
          @Override
          public void handleInput()
          {
              EntityPlayer player = (EntityPlayer)plane.getControllingEntity();
              if(player != mc.thePlayer)
              {
                  mc.displayGuiScreen(null);
                  return;
              }
              if(!Mouse.isGrabbed())
              {
                  mc.mouseHelper.grabMouseCursor();
              }
              handleMouseInput();
              for(; Keyboard.next(); handleKeyboardInput())
              {}
      
              int l = Mouse.getDX();
              int m = Mouse.getDY();
      
              plane.onMouseMoved(l, m);
      
              if(plane != null && !plane.isDead() && plane.getControllingEntity() != null && plane.getControllingEntity() instanceof EntityPlayer)
              {
                  if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindForward.getKeyCode()))// KeyInputHandler.accelerateKey.getKeyCode()))
                  {
                      plane.pressKey(0, player);
                  }
                  if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindBack.getKeyCode()))// KeyInputHandler.decelerateKey.getKeyCode()))
                  {
                      plane.pressKey(1, player);
                  }
                  if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindLeft.getKeyCode()))// KeyInputHandler.leftKey.getKeyCode()))
                  {
                      plane.pressKey(2, player);
                  }
                  if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindRight.getKeyCode()))// KeyInputHandler.rightKey.getKeyCode()))
                  {
                      plane.pressKey(3, player);
                  }
                  if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindJump.getKeyCode()))// KeyInputHandler.upKey.getKeyCode()))
                  {
                      plane.pressKey(4, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.downKey.getKeyCode()))
                  {
                      plane.pressKey(5, player);
                  }
                  if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindSneak.getKeyCode()))// KeyInputHandler.exitKey.getKeyCode()))
                  {
                      plane.pressKey(6, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.inventoryKey.getKeyCode()))
                  {
                      plane.pressKey(7, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.bombKey.getKeyCode()))
                  {
                      plane.pressKey(8, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.gunKey.getKeyCode()))
                  {
                      plane.pressKey(9, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.controlSwitchKey.getKeyCode()))
                  {
                      plane.pressKey(10, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.leftRollKey.getKeyCode()))
                  {
                      plane.pressKey(11, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.rightRollKey.getKeyCode()))
                  {
                      plane.pressKey(12, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.gearKey.getKeyCode()))
                  {
                      plane.pressKey(13, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.doorKey.getKeyCode()))
                  {
                      plane.pressKey(14, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.modeKey.getKeyCode()))
                  {
                      plane.pressKey(15, player);
                  }
                  // if(FlansMod.proxy.keyDown(KeyInputHandler.trimKey.getKeyCode()))
                  // {
                  // plane.pressKey(16, player);
                  // }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.flareKey.getKeyCode()))
                  {
                      plane.pressKey(18, player);
                  }
                  if(FlansMod.proxy.keyDown(KeyInputHandler.enginePower.getKeyCode()))
                  {
                      plane.pressKey(19, player);
                  }
      
              }
              else
              {
                  mc.displayGuiScreen(null);
              }
          }
      
          private void drawFuelString(EntityDriveable d, int x, int y)
          {
              (...)
          }
      
          private int lastCalculatedSpeed, speedCacheTime;
      
          private int calculateSpeed(EntitySeat s)
          {
              (...)
          }
      
          @Override
          public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_)
          {
              
              super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_);
              if(plane instanceof EntitySeat)
              {
                  EntitySeat s = (EntitySeat)plane;
                  if(s.driver)
                  {
                      EntityDriveable d = s.driveable;
                      
                      mc.renderEngine.bindTexture(new ResourceLocation("flansmod", "gui/hud.png"));
                      GL11.glColor4f(1, 1, 1, 1);
                      GL11.glPushMatrix();
                      GL11.glScaled(1.2, 1.2, 1);
                      drawTexturedModalRect(0, 0, 0, 0, 256, 256);
                      GL11.glPopMatrix();
      
                      mc.fontRenderer.drawString(d.getDriveableType().name, 10, 15, Color.WHITE.getRGB());
                      mc.fontRenderer.drawString(lastCalculatedSpeed + " km/h", 180, 57, Color.WHITE.getRGB());
      
                      drawFuelString(d, 10, 40);
                      
                      
                    (...)
                      
                  }
                  
                  
              }
      
          }
          
          public boolean isWheel(DriveablePart part) {
              (...)
          }
      
          @Override
          public void drawBackground(int i)
          {
              // Plane gauges overlay
          }
      
          @Override
          public boolean doesGuiPauseGame()
          {
              return false;
          }
      }
      
      
      ShE3py 1 Reply Last reply Reply Quote 0
      • ShE3py
        ShE3py @Cobra45 last edited by

        @hyperkut a dit dans [1.7.10] Problème affichage GUI custom :

        drawTexturedModalRect(0, 0, 0, 0, 256, 256);

        Je pense que l’erreur viens de cette ligne : tu dessines ton image dans une zone de 256x256, ce qui est plus grand que ton image et donc Minecraft remplis le reste par du blanc.
        Il faudrait que tu essaye de récupérer la vraie taille de ta texture.

        Après si tu veut tricher tu peut remplacer ton glColor4f(1, 1, 1, 1); par glColor4f(1f, 1f, 1f, 0f);, ce qui normalement devrait changer la couleur de fond en transparent.

        Cordialement,
        ShE3py.

        1 Reply Last reply Reply Quote 0
        • C
          Cobra45 last edited by Cobra45

          Merci pour ta réponse.

          Je viens d’essayer et le soucis est exactement le même.
          La taille réelle de la texture est 1024x1024.

          Je comprend toujours pas 🤔

          ShE3py 1 Reply Last reply Reply Quote 0
          • ShE3py
            ShE3py @Cobra45 last edited by

            La taille de la texture dans sont fichier est en pixels, mais elle ne garde pas les mêmes dimensions une fois rendue. Tu peut tenter de modifier 256, en le doublant par exemple pour voir si le rectangle blanc double bien aussi.

            Je vais tenter de trouver la fonction pour récupérer la taille de la texture une fois rendus, mon forge est en 1.12.2 mais je ne pense pas que la manière devrait changer.
            J’édit quand j’ai la fonction.

            1 Reply Last reply Reply Quote 0
            • C
              Cobra45 last edited by Cobra45

              Ok super merci.

              Sinon voici ce que cela fait en 512x512 :

              0_1531759009716_2018-07-16_18.35.01.png

              ShE3py 1 Reply Last reply Reply Quote 0
              • ShE3py
                ShE3py @Cobra45 last edited by

                @hyperkut a dit :

                La taille réelle de la texture est 1024x1024.

                Convertis ta texture en 256x256, c’est la taille avec laquelle Minecraft traite les textures.
                Remets drawTexturedModalRect(0, 0, 0, 0, 256, 256), et renvois un screen.

                1 Reply Last reply Reply Quote 0
                • C
                  Cobra45 last edited by

                  Voici ce que ça fait selon ce que tu m’as dis

                  0_1531764305135_2018-07-16_20.04.34.png

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                    Salut,
                    La fonction drawTexturedModalRect a pour argument : point x de départ sur l’écran, point y de départ sur l’écran, point x de départ sur le fichier de texture, point y sur le fichier de texture, largeur, hauteur)
                    Sur ton fichier de 512x512, ta texture ne commence pas en 0,0 (en haut à gauche) donc déjà il faut que tu adaptes les deux 0 du milieu.
                    Il faudra aussi changer les deux premiers 0 si tu veux que ce soit centré sur l’écran.

                    Et enfin, les deux derniers 256 doivent être remplacé par la taille un pixel du morceau de texture que tu veux draw.

                    1 Reply Last reply Reply Quote 0
                    • C
                      Cobra45 last edited by

                      Ce que tu me dis c’est pour ajuster la texture sur l’écran c’est bien ça ? Est-ce que cela résoudra le problème de fond blanc ?

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                        Tu as actuellement un fond blanc car tu draw les pixels blanche.
                        Si tu draw seulement la partie coloré tu ne les aura plus.

                        1 Reply Last reply Reply Quote 0
                        • C
                          Cobra45 last edited by

                          Problème résolu 😉 Merci !

                          1 Reply Last reply Reply Quote 0
                          • 1 / 1
                          • First post
                            Last post
                          Design by Woryk
                          Contact / Mentions Légales / Faire un don

                          MINECRAFT FORGE FRANCE © 2018

                          Powered by NodeBB