• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu [1.7.10] Problème affichage GUI custom

    1.7.x
    1.7.10
    3
    11
    971
    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.
    • C
      Cobra45 dernière édition par 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 réponse Dernière réponse Répondre Citer 0
      • ShE3py
        ShE3py @Cobra45 dernière édition par

        @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 réponse Dernière réponse Répondre Citer 0
        • C
          Cobra45 dernière édition par 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 réponse Dernière réponse Répondre Citer 0
          • ShE3py
            ShE3py @Cobra45 dernière édition par

            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 réponse Dernière réponse Répondre Citer 0
            • C
              Cobra45 dernière édition par Cobra45

              Ok super merci.

              Sinon voici ce que cela fait en 512x512 :

              0_1531759009716_2018-07-16_18.35.01.png

              ShE3py 1 réponse Dernière réponse Répondre Citer 0
              • ShE3py
                ShE3py @Cobra45 dernière édition par

                @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 réponse Dernière réponse Répondre Citer 0
                • C
                  Cobra45 dernière édition par

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

                  0_1531764305135_2018-07-16_20.04.34.png

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                    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 réponse Dernière réponse Répondre Citer 0
                    • C
                      Cobra45 dernière édition par

                      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 réponse Dernière réponse Répondre Citer 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                        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 réponse Dernière réponse Répondre Citer 0
                        • C
                          Cobra45 dernière édition par

                          Problème résolu 😉 Merci !

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

                          MINECRAFT FORGE FRANCE © 2018

                          Powered by NodeBB