提问者:小点点

如何检查鼠标光标是否输入了Java中的字符串?


所以我制作了一个菜单,而不是使用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);

共1个答案

匿名用户

您不会在循环中更新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