Плавный рендер

Версия Minecraft
1.7.10
477
7
51
Здравствуйте, делаю рендер худа полосы здоровья и получается так что при уменьшение здоровье резко уменьшается это понятно но все таки хочется более плавной работы, как можно реализовать плавное уменьшение и увеличение здоровья?

Java:
     public static void drawHud(int ScaledWidth, int ScaledHeight, Minecraft mc, EntityPlayer player) {
         int n5 = ScaledWidth - 110;
         int g = ScaledHeight - 60;
         GL11.glBlendFunc(770, 771);
         GL11.glDisable(3553);
         GL11.glColor4f(0.0f, 0.0f, 0.0f, 0.25f);
         drawTexturedRect(n5, g, 100.0, 50.0);
        
         float heal = mc.thePlayer.getHealth() * 5 ;
         float healmax = mc.thePlayer.getMaxHealth() * 5 ;
         GL11.glColor4f(1.0f, 0.0f, 0.0f, 0.4f);
         drawTexturedRect(ScaledWidth - 110, ScaledHeight - 60, heal, 10.0);
         GL11.glColor4f(1.0f, 0.0f, 0.0f, 0.25f);
         drawTexturedRect(ScaledWidth - 110, ScaledHeight - 60, healmax, 10.0);
           GL11.glEnable(3553);
          
     }

что бы не задавать второй вопрос то задам его тут.
Как можно с помощью тесселятора нарисовать вот такую фигуру .
так как я искал вчера нормальный туториал и нашел лишь 1 и то он не до конца объяснен было бы не плохо если кто-то сделает полный туторил с примерами не только блока но и с чем нибудь еще
Безымянный.png
 
хочется более плавной работы
Хранишь сколько у игрока было здоровья ДО и сравниваешь с тем, что есть сейчас, в зависимости от того что будет изменяешь рендер..

что бы не задавать второй вопрос то задам его тут.
А второй лучший ответ, тоже будешь ставить в 1 теме?
 
Когда-то делал что-то похожее, принцип похож

Код:
@Override
public void drawButton(Minecraft mc, int xMouse, int yMouse){
GL11.glPushMatrix();
            boolean hovering = (xMouse >= xPosition &&
                            xMouse <= this.xPosition + width &&
                            yMouse >= yPosition &&
                            yMouse <= this.yPosition + height);

            GL11.glEnable(GL11.GL_BLEND);
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_LINE_SMOOTH);
            {
                GL11.glBegin(GL11.GL_LINE_LOOP);
                GL11.glColor4f(0.75F,0.75F,1.0F,1.0F);
                GL11.glVertex2f(this.xPosition,this.yPosition);
                GL11.glVertex2f(this.xPosition + (height/2),this.yPosition + height);
                GL11.glVertex2f(this.xPosition + width,this.yPosition + height);
                GL11.glVertex2f(this.xPosition + width -(height/2),this.yPosition);
                GL11.glEnd();
            }
            GL11.glDisable(GL11.GL_LINE_SMOOTH);
            GL11.glBegin(GL11.GL_TRIANGLE_STRIP);
            {
            if(hovering){
                GL11.glColor4f(0.5F,0.5F,0.75F,0.75F);
            } else {
                GL11.glColor4f(0.25F,0.25F,0.5F,0.75F);
            }
                GL11.glVertex2f(this.xPosition,this.yPosition);
                GL11.glVertex2f(this.xPosition + (height/2),this.yPosition + height);
                GL11.glVertex2f(this.xPosition + width -(height/2),this.yPosition);
                GL11.glVertex2f(this.xPosition + width,this.yPosition + height);
            }
            GL11.glEnd();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            GL11.glDisable(GL11.GL_BLEND);
            FontRenderer fontrenderer = mc.fontRenderer;
            this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition, 0xFFFFFF);
            GL11.glPopMatrix();
}

button.png

На счёт плавного изменения, то можно сделать метод, который будет каждый тик изменять значение для рендера в нужную сторону если если оно отличается от фактического.
 
Последнее редактирование:
Назад
Сверху