Résolu Texte Qui defil
-
Bonjour j’aimerais savoir comment mettre un texte qui défile au dessus de minecraft dans le GuiMainMenu
-
Si ton problème précédent est résolu (http://www.minecraftforgefrance.fr/showthread.php?tid=2211) merci de mettre la balise résolu en éditant ton premier message.
Pour faire un texte qui défile il suffit de faire un variable qui va prendre des valeurs allant de la taille en largeur de minecraft (this.width) jusqu’à 0 - la taille du texte. Une fois cette valeur atteinte on remet sur this.width la valeur de la variable.
Donc au début d’une fonction qui est mise à jour à chaque tick, comme par exemple dans drawScreen il faudra mettre un truc du genre :this.maVariable –; if(this.maVariable < 0 - this.mc.getFondRenderer().getStringLength("ton texte")) { this.maVariable = this.width; }
(il faudra bien sur déclarer la variable au début de la classe avec comme valeur par défaut this.width :
private int maVariable = this.width;
)
Ensuite il suffit de draw le texte en fonction de cette variable pour la valeur en x.
Donc toujours dans la fonction drawScreen, il faudra mettre :this.mc.getFondRenderer().drawString("ton texte", maVariable, 20, couleur);
(couleur est un int du type rbg, donc rouge + bleu * 256 + vert * 255^2.
Le mieux est de mettre la valeur en hexa avec 0x <valeur>et utiliser les codes couleurs html. Donc 0x000000 pour du noir, 0xFF0000 pour du rouge, 0xFFFFFF pour du blanc, etc …)J’ai donner ce code de tête, il est possible que le nom des fonctions soient différents que ce que j’ai donné.</valeur>
-
J’ai une erreur a getFondRenderer
-
J’aurai mieux fait de lancer eclipse tout de suite x)
C’est :
this.fontRendererObj.getStringWidth(“ton texte”)
et non this.mc.getFondRenderer().getStringLength(“ton texte”)Et pour draw c’est :
this.drawString(this.fontRendererObj, ton texte", maVariable, 20, couleur); -
Sa ne marche toujour pas voici ma class
package fr.theazkaze.client.custommenu; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButtonLanguage; import net.minecraft.client.gui.GuiConfirmOpenLink; import net.minecraft.client.gui.GuiLanguage; import net.minecraft.client.gui.GuiMultiplayer; import net.minecraft.client.gui.GuiOptions; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSelectWorld; import net.minecraft.client.gui.GuiYesNo; import net.minecraft.client.gui.GuiYesNoCallback; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.resources.I18n; import net.minecraft.realms.RealmsBridge; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.world.demo.DemoWorldServer; import net.minecraft.world.storage.ISaveFormat; import net.minecraft.world.storage.WorldInfo; import org.apache.commons.io.Charsets; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GLContext; import org.lwjgl.util.glu.Project; public class GuiCustomMainMenu extends GuiScreen implements GuiYesNoCallback { private static final Logger logger = LogManager.getLogger(); /** The RNG used by the Main Menu Screen. */ private static final Random rand = new Random(); /** Counts the number of screen updates. */ private float updateCounter; /** The splash message. */ private String splashText; private GuiButton buttonResetDemo; /** Timer used to rotate the panorama, increases every tick. */ private int panoramaTimer; /** * Texture allocated for the current viewport of the main menu's panorama background. */ 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("textures/gui/title/minecraft.png"); /** An array of all the paths to the panorama pictures. */ private final ResourceLocation backGround = new ResourceLocation("modtutoriel", "textures/gui/2.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 int maVariable = this.width; private static final String __OBFID = "CL_00001154"; public GuiCustomMainMenu() { this.field_146972_A = field_96138_a; this.splashText = "missingno"; BufferedReader var1 = null; try { ArrayList var2 = new ArrayList(); var1 = new BufferedReader(new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(splashTexts).getInputStream(), Charsets.UTF_8)); String var3; while ((var3 = var1.readLine()) != null) { var3 = var3.trim(); if (!var3.isEmpty()) { var2.add(var3); } } if (!var2.isEmpty()) { do { this.splashText = (String)var2.get(rand.nextInt(var2.size())); } while (this.splashText.hashCode() == 125780783); } } catch (IOException var12) { ; } finally { if (var1 != null) { try { var1.close(); } catch (IOException var11) { ; } } } this.updateCounter = rand.nextFloat(); 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"; } } /** * Called from the main game loop to update the screen. */ public void updateScreen() { ++this.panoramaTimer; } /** * Returns true if this GUI should pause the game when it is displayed in single-player */ public boolean doesGuiPauseGame() { return false; } /** * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e). */ protected void keyTyped(char p_73869_1_, int p_73869_2_) {} /** * Adds the buttons (and other controls) to the screen in question. */ public void initGui() { this.viewportTexture = new DynamicTexture(256, 256); this.field_110351_G = this.mc.getTextureManager().getDynamicTextureLocation("background", this.viewportTexture); Calendar var1 = Calendar.getInstance(); var1.setTime(new Date()); if (var1.get(2) + 1 == 11 && var1.get(5) == 9) { this.splashText = "Happy birthday, ez!"; } else if (var1.get(2) + 1 == 6 && var1.get(5) == 1) { this.splashText = "Happy birthday, Notch!"; } else if (var1.get(2) + 1 == 12 && var1.get(5) == 24) { this.splashText = "Merry X-mas!"; } else if (var1.get(2) + 1 == 1 && var1.get(5) == 1) { this.splashText = "Happy new year!"; } else if (var1.get(2) + 1 == 10 && var1.get(5) == 31) { this.splashText = "OOoooOOOoooo! Spooky!"; } boolean var2 = true; int var3 = this.height / 4 + 48; if (this.mc.isDemo()) { this.addDemoButtons(var3, 24); } else { this.addSingleplayerMultiplayerButtons(var3, 24); } this.buttonList.add(new GuiButton(0, this.width / 2 - 100, var3 + 72 + 12, 98, 20, I18n.format("menu.options", new Object[0]))); this.buttonList.add(new GuiButton(4, this.width / 2 + 2, var3 + 72 + 12, 98, 20, I18n.format("menu.quit", new Object[0]))); this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, var3 + 72 + 12)); Object var4 = 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 var5 = Math.max(this.field_92023_s, this.field_92024_r); this.field_92022_t = (this.width - var5) / 2; this.field_92020_v = this.field_92022_t + var5; this.field_92019_w = this.field_92021_u + 24; } } /** * Adds Singleplayer and Multiplayer buttons on Main Menu for players who have bought the game. */ private void addSingleplayerMultiplayerButtons(int p_73969_1_, int p_73969_2_) { this.buttonList.add(new GuiButton(1, this.width / 2 - 100, p_73969_1_, I18n.format("menu.singleplayer", new Object[0]))); this.buttonList.add(new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.format("menu.multiplayer", new Object[0]))); this.buttonList.add(new GuiButton(14, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 2, I18n.format("menu.online", new Object[0]))); this.buttonList.add(new GuiButton(30, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, ("\u00A74NovaMine"))); } /** * Adds Demo buttons on Main Menu for players who are playing Demo. */ private void addDemoButtons(int p_73972_1_, int p_73972_2_) { this.buttonList.add(new GuiButton(11, this.width / 2 - 100, p_73972_1_, I18n.format("menu.playdemo", new Object[0]))); this.buttonList.add(this.buttonResetDemo = new GuiButton(12, this.width / 2 - 100, p_73972_1_ + p_73972_2_ * 1, I18n.format("menu.resetdemo", new Object[0]))); ISaveFormat var3 = this.mc.getSaveLoader(); WorldInfo var4 = var3.getWorldInfo("Demo_World"); if (var4 == null) { this.buttonResetDemo.enabled = false; } } protected void actionPerformed(GuiButton p_146284_1_) { if (p_146284_1_.id == 0) { this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); } if (p_146284_1_.id == 5) { this.mc.displayGuiScreen(new GuiLanguage(this, this.mc.gameSettings, this.mc.getLanguageManager())); } if (p_146284_1_.id == 1) { this.mc.displayGuiScreen(new GuiSelectWorld(this)); } if (p_146284_1_.id == 2) { this.mc.displayGuiScreen(new GuiMultiplayer(this)); } if (p_146284_1_.id == 14) { this.func_140005_i(); } if (p_146284_1_.id == 4) { this.mc.shutdown(); } if (p_146284_1_.id == 11) { this.mc.launchIntegratedServer("Demo_World", "Demo_World", DemoWorldServer.demoWorldSettings); } if (p_146284_1_.id == 12) { ISaveFormat var2 = this.mc.getSaveLoader(); WorldInfo var3 = var2.getWorldInfo("Demo_World"); if (var3 != null) { GuiYesNo var4 = GuiSelectWorld.func_152129_a(this, var3.getWorldName(), 12); this.mc.displayGuiScreen(var4); } } } private void func_140005_i() { RealmsBridge var1 = new RealmsBridge(); var1.switchToRealms(this); } public void confirmClicked(boolean p_73878_1_, int p_73878_2_) { if (p_73878_1_ && p_73878_2_ == 12) { ISaveFormat var6 = this.mc.getSaveLoader(); var6.flushCache(); var6.deleteWorldDirectory("Demo_World"); this.mc.displayGuiScreen(this); } else if (p_73878_2_ == 13) { if (p_73878_1_) { try { Class var3 = Class.forName("java.awt.Desktop"); Object var4 = var3.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]); var3.getMethod("browse", new Class[] {URI.class}).invoke(var4, new Object[] {new URI(this.field_104024_v)}); } catch (Throwable var5) { logger.error("Couldn\'t open link", var5); } } this.mc.displayGuiScreen(this); } } /** * Draws the main menu panorama */ private void renderBackGround() { GL11.glViewport(0, 0, 256, 256); this.mc.getTextureManager().bindTexture(backGround); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); int k = this.width; int l = this.height; tessellator.addVertexWithUV(0, 0, this.zLevel, 0, 0); tessellator.addVertexWithUV(0, l, this.zLevel, 0, 1); tessellator.addVertexWithUV(k, l, this.zLevel, 1, 1); tessellator.addVertexWithUV(k, 0, this.zLevel, 1, 0); tessellator.draw(); } /** * Rotate and blurs the skybox view in the main menu */ /** * Renders the skybox in the main menu */ /** * Draws the screen and all the components in it. */ public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_) { GL11.glDisable(GL11.GL_ALPHA_TEST); this.renderBackGround(); GL11.glEnable(GL11.GL_ALPHA_TEST); Tessellator var4 = Tessellator.instance; short var5 = 274; int var6 = this.width / 2 - var5 / 2; byte var7 = 30; this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215); this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE); this.mc.getTextureManager().bindTexture(minecraftTitleTextures); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); if ((double)this.updateCounter < 1.0E-4D) { this.drawTexturedModalRect(var6 + 0, var7 + 0, 0, 0, 99, 44); this.drawTexturedModalRect(var6 + 99, var7 + 0, 129, 0, 27, 44); this.drawTexturedModalRect(var6 + 99 + 26, var7 + 0, 126, 0, 3, 44); this.drawTexturedModalRect(var6 + 99 + 26 + 3, var7 + 0, 99, 0, 26, 44); this.drawTexturedModalRect(var6 + 155, var7 + 0, 0, 45, 155, 44); } else { this.drawTexturedModalRect(var6 + 0, var7 + 0, 0, 0, 155, 44); this.drawTexturedModalRect(var6 + 155, var7 + 0, 0, 45, 155, 44); } var4.setColorOpaque_I(-1); GL11.glPushMatrix(); GL11.glTranslatef((float)(this.width / 2 + 90), 70.0F, 0.0F); GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F); float var8 = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F); var8 = var8 * 100.0F / (float)(this.fontRendererObj.getStringWidth(this.splashText) + 32); GL11.glScalef(var8, var8, var8); this.drawCenteredString(this.fontRendererObj, this.splashText, 0, -8, -256); GL11.glPopMatrix(); String var9 = EnumChatFormatting.GRAY + "Minecraft 1.7.10"; if (this.mc.isDemo()) { var9 = var9 + " Demo"; } this.drawString(this.fontRendererObj, var9, 2, this.height - 10, -1); String var10 = EnumChatFormatting.DARK_RED + "Tous les droit sont réserver a NovaMine"; this.drawString(this.fontRendererObj, var10, this.width - this.fontRendererObj.getStringWidth(var10) - 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); this.drawString(this.fontRendererObj, this.field_92025_p, this.field_92022_t, this.field_92021_u, -1); } super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_); } /** * Called when the mouse is clicked. */ 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 var4 = 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 var5 = new GuiConfirmOpenLink(this, this.field_104024_v, 13, true); var5.func_146358_g(); this.mc.displayGuiScreen(var5); } } this.maVariable –; if(this.maVariable < 0 - this.fontRendererObj.getStringWidth("jikhogfreqiuoàfeghsjiogfrsqjpoigtreqzjihorfdgiojhteijripoj")) { this.maVariable = this.width; } this.drawString(this.fontRendererObj, "jikhogfreqiuoàfeghsjiogfrsqjpoigtreqzjihorfdgiojhteijripoj", maVariable, 20, 0xFFFFFF ); } }
-
Tu as mit le texte dans mouseClicked x)
il faut le mettre dans la fonction drawScreen.
D’ailleurs tu aurai pu donner un autre nom à la variable, j’avais mit maVariable car je n’avais pas d’idée x)
Un truc du genre scrollingTextCoord aurait été mieux. -
Je tiendrais à rajouter qu’il est pas franchement sympa (voire légal) de remplacer “Tous les droits sont réservés à Mojang AB” par “Tous les droits sont réservés à NovaMine” alors que Minecraft ne t’appartient pas…
Sent from my GT-I9000 using Tapatalk 2
-
Je fesais un test pour voir se que sa donnais