所以我制作了一个菜单,而不是使用Java的按钮,我决定使用文本作为按钮。 我的想法是,如果鼠标光标在文本上,它就会工作。 但它没有。 我的代码是:
public void MouseClick(int mouseX, int mouseY, int button) {
String[] names = {"Singleplayer", "Mutliplayer", "Language", "Options", "Exit"};
int count = 0;
for(String name : names) {
float x = (width/names.length) * count + (width/names.length) / 2f - mc.fontRendererObj.getStringWidth(name)/2f;
float y = height;
if(mouseX >= x && mouseY >= y && mouseX < x + mc.fontRendererObj.getStringWidth(name) && mouseY < y + mc.fontRendererObj.FONT_HEIGHT){
System.out.println("Well this works");
switch(name) {
case "Singleplayer":
mc.displayGuiScreen(new GuiWorldSelection(this));
System.out.println("This Works");
break;
case "Multiplayer":
mc.displayGuiScreen(new GuiMultiplayer(this));
System.out.println("Testing if this even works");
break;
}
}
}
}
我用于后台的代码:
this.drawModalRectWithCustomSizedTexture(0, 0, 0, 0, this.width, this.height, this.width, this.height);
this.drawGradientRect(0, height - 100, width, height, 0x00000000, 0xff000000);
String [] names = {"Singleplayer", "Mutliplayer", "Language", "Options", "Exit"};
int count = 0;
for(String name : names) {
this.drawString(mc.fontRendererObj, name, (width/names.length) * count + (width/names.length) / 2f, height - 20, -1);
count++;
}
GlStateManager.translate( width/2f, height/2f - mc.fontRendererObj.FONT_HEIGHT,0);
GlStateManager.scale(2, 2, 1);
GlStateManager.translate(-(width/2f),-(height/2f),0);
this.drawCenteredString(mc.fontRendererObj, "WeBeTrees Minecraft Mod", width/2f + 7, height/2f - mc.fontRendererObj.FONT_HEIGHT, -1);
GlStateManager.translate(4,4,0);
GlStateManager.scale(0.5, 0.5, 1);
GlStateManager.translate(-4,-4,0);
您不会在循环中更新count
,因此对于要测试的每个菜单项,单击是否发生在第一个项的位置。 添加Count++
以更新它:
for(String name : names) {
float x = (width/names.length) * count + (width/names.length) / 2f - mc.fontRendererObj.getStringWidth(name)/2f;
// ...rest of loop...
count++;
}
此外,检查字符串边界框的计算是否与绘制字符串的位置匹配。 y=height
对我来说,您正在测试单击是否发生在窗口之外(低于height
)