2015-04-17 2 views
1

Я создаю мотив minecraft, который реализует новую систему «энергии» для игрока. Существуют различные способы приобретения этой энергии, и я хочу, чтобы она отображала количество энергии игрока на экране. Мой план это сделать GUI (с OpenGL, так как Minecraft использует), который использует файл с именем "energybar.png":Поверните целое число в набор изображений

energybar.png

для печати номеров. Это код, который у меня есть для метода, который будет действовать, как описано.

@SubscribeEvent 
public void onGUIRenderEvent(RenderGameOverlayEvent event){ 

    if(event.isCancelable() || event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE) 
    { 
     return; 
    } 

    int xPos = 10; 
    int yPos = 10; 
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 
    GL11.glDisable(GL11.GL_LIGHTING); 

    mc.renderEngine.bindTexture(energybar); 

    String energyString = Integer.toString(Energy.PlayerTotalEnergy); 

    for(int i=0; i < energyString.length(); i++) { 
     LogHelper.info("Energy: " + energyString); 
     drawTexturedModalRect(xPos, yPos, (Energy.PlayerTotalEnergy/(int)Math.pow(10, i))*16, 0, 16, 16); 
     xPos += 16; 
    } 

} 

Каждое число на фото разнесены поэтому она должна быть в своих соответствующих 16 пикселей (то есть: 0 х позиции 0-16, 1 х позиции 17-32 и т.д.). Фотография 256x256, как определено стандартами GUI-системы minecraft. Это макет методы нарисовать картину:

void drawTexturedModalRect(int xPosition, int yPosition, int uPosition, int vPosition, int width, int height) 

У меня есть проблема с этим состоит в том, что позиции U для чисел мне нужно напечатать на экране не работает правильно.

Я также попытался прохождения:

energyString.substring(i, i) 

к способу, который принимает подстроку и преобразует его обратно в целое число и умножает его на 16, чтобы получить uPosition, но когда я делаю:

String energyString = Integer.toString(Energy.PlayerTotalEnergy); 

Integer.toString() а также String.valueOf() методы имеют проблемы с нулями. Например, если Energy.PlayerTotalEnergy был только 0, они не вернули строку "0", они просто вернули "".

Если кто-то может помочь мне выяснить, почему я не могу заставить это работать, или придумать, как я могу использовать Minecraft и OpenGL для печати этого номера на моем экране. Причина, по которой я не просто печатаю ее как число, - это то, что я хочу сохранить красные цифры по мере их появления.

ответ

1

Это скорее догадка. Мне кажется, что если Energy.PlayerTotalEnergy был, скажем, 327, то ваш uPosition будет:

i=0: u= 327*16 
i=1: u= 32*16 
i=2: u= 3*16 

вы имели в виду, чтобы они были 7*16, 2*16 и 3*16? В этом случае вы должны mod их 10:

drawTexturedModalRect(xPos, yPos, ((Energy.PlayerTotalEnergy/(int)Math.pow(10, i))%10)*16, 0, 16, 16); 
+0

Оооо, я всегда забываю о по модулю XD. Спасибо за помощь! –

 Смежные вопросы

  • Нет связанных вопросов^_^