把一个整数变成一组图片
Turn an Integer into a set of pictures
我正在制作一个 minecraft mod,它为玩家实现了一个 "energy" 的新系统。有多种方法可以获得这种能量,我希望它能在屏幕上显示玩家的能量。我的计划是制作一个使用名为 "energybar.png":
的文件的 GUI(使用 OpenGL,正如 minecraft 使用的那样)
打印数字。这是我所拥有的方法代码,将按照描述执行。
@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,等等)。根据 Minecraft 的 GUI 系统标准定义,照片为 256x256。这是画图方法的布局:
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
,它们就不会 return 字符串 "0"
,它们只是 return ""
.
如果有人能帮我弄清楚为什么我不能让它工作,或者想出一个更好的主意,让我知道如何使用 Minecraft 和 OpenGL 将这个数字打印到我的屏幕上。我不只是将其打印为数字的原因是因为我想保持红色数字的外观。
这更多是猜测。
在我看来,如果 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);
我正在制作一个 minecraft mod,它为玩家实现了一个 "energy" 的新系统。有多种方法可以获得这种能量,我希望它能在屏幕上显示玩家的能量。我的计划是制作一个使用名为 "energybar.png":
的文件的 GUI(使用 OpenGL,正如 minecraft 使用的那样)打印数字。这是我所拥有的方法代码,将按照描述执行。
@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,等等)。根据 Minecraft 的 GUI 系统标准定义,照片为 256x256。这是画图方法的布局:
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
,它们就不会 return 字符串 "0"
,它们只是 return ""
.
如果有人能帮我弄清楚为什么我不能让它工作,或者想出一个更好的主意,让我知道如何使用 Minecraft 和 OpenGL 将这个数字打印到我的屏幕上。我不只是将其打印为数字的原因是因为我想保持红色数字的外观。
这更多是猜测。
在我看来,如果 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);