我正在制作一个Minecraft mod,为玩家实现一个新的“能量”系统。有多种方法可以获得这种能量,我希望它能够将玩家的能量显示在屏幕上。我的计划是使用一个名为“energybar.png”的文件制作一个GUI(使用OpenGL,就像我的世界使用的那样):
打印数字。这是我将按照所述方法执行的代码。
@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是x位置0-16,1是x位置17-32等)。照片是256x256,由Minecraft的GUI系统标准定义。这是绘制图片的方法的布局:
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将这个数字打印到我的屏幕上。我不仅仅将它打印为数字的原因是因为我想保留红色数字。
答案 0 :(得分: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);
:
{{1}}