Posted July 9, 201510 yr So I was just wonder about how to do text animation, such as when you receive an achievement, the window pans in then out, I was wondering how to do this with text. Basically what I want is for the text to start in about the middle of the screen then pan out of the screen upwards.
July 9, 201510 yr Author I have tried using that way for hours but I can not get it to work at all. I am drawing the string in a RenderGameOverlayEvent with my HUD.
July 9, 201510 yr Author ScaledResolution scaledresolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); int i = scaledresolution.getScaledWidth(); int j = scaledresolution.getScaledHeight(); int yPos = j / 2 - 3; int currentPos = yPos; int lastPos = currentPos; float pos = lastPos + (lastPos - currentPos) * event.partialTicks; // RenderGameOverlayEvent partialTicks this.fontRendererObj.drawString("XP: " + this.getXPAmount(), i / 2 - this.fontRendererObj.getStringWidth("XP: " + this.getXPAmount()) / 2, (int) pos, 16777215); lastPos = currentPos; this sort of works, but the text flashes from one point to another then goes back to the center after a bit. I would like it to start in the middle and pan upwards and to not go back to the center till I pickup another xp orb.
July 9, 201510 yr Author How would I modify it to make it appear to be moving rather than it to just appear at its modified position, cause I have tried doing pos = pos + 10; pos *= 10; pos += 10; pos -= 10; but they all just goto the modified pos instead of showing the movement.
July 9, 201510 yr Author I now have this: private int lastTickPosY; private int posY; @SubscribeEvent public void onRender(RenderGameOverlayEvent event) { if (event.type == RenderGameOverlayEvent.ElementType.TEXT && !mc.gameSettings.showDebugInfo) { String xp = "XP: " + this.getXPAmount(); this.posY = this.height / 2; float positionY = (float) (this.lastTickPosY - (this.posY - this.lastTickPosY) * event.partialTicks); GlStateManager.pushMatrix(); GlStateManager.translate(0.0F, positionY, 0.0F); this.fontRendererObj.drawString(xp, this.width / 2 - this.fontRendererObj.getStringWidth(xp) / 2 + 27, this.posY, -128); GlStateManager.popMatrix(); } } @SubscribeEvent public void onPickupXP(PlayerPickupXpEvent event) { this.setXPValue(event.orb.getXpValue()); this.shouldDrawXP = true; } @SubscribeEvent public void onTick(ClientTickEvent event) { this.lastTickPosY = this.posY; } private int getXPAmount() { return this.xpValue; } private void setXPValue(int xpValue) { this.xpValue = xpValue; } but the text flashes from the point it should be at back to the point it started.
July 9, 201510 yr Author How do I change the posY value then? cause as far as I know, it is changing with the posY = height / 2;
July 9, 201510 yr Author How do I make it to increment the position every tick for a certain amount of time? Because I have been trying this for a long time and it is very annoying.
July 10, 201510 yr private int posY = 100; @SubscribeEvent public void onRender(RenderGameOverlayEvent.Post event) { if (event.type == RenderGameOverlayEvent.ElementType.TEXT && !mc.gameSettings.showDebugInfo) { // now - every tick 'posY' will be +1. } } @SubscribeEvent public void onTick(ClientTickEvent event) { this.posY += 1; } How can you not see this? What, you want "certain amount of time"? if (this.posY < 200) this.posY += 1; Done. If you want smooths stuff - use easing functions. 1.7.10 is no longer supported by forge, you are on your own.
July 10, 201510 yr Author Thank you! I don't know why I ever thought of that even though it was so dang obvious...
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.