Nez / Monogame:无法单击按钮,但鼠标动作已正确注册

时间:2018-11-30 06:18:13

标签: java monogame

因此,我不知道我是否丢失了某些东西,但是无论如何以某种方式工作或研究它,我都无法单击屏幕上的任何按钮。

我制作了一个带有按钮的对话框,基本上如示例项目所示,但是当我尝试单击该按钮时,什么也没有发生。 我尝试以编程方式触发onClick,并且效果很好,我还测试了鼠标输入是否可以正常注册。 无论出于什么原因,我都不知所措。

我的课程代码如下:

public class Interactable : UICanvas
{

    public void interact()
    {
        var skin = Skin.createDefaultSkin();

        var table = stage.addElement(new Table());
        table.center();
        table.setFillParent(true);

        table.add(talk(this.entity.name, "Stay a while and glisten", "Bye!"));

    }


    public Dialog talk(string title, string messageText, string closeButtonText)
    {
        var skin = Skin.createDefaultSkin();

        var style = new WindowStyle
        {
            background = new PrimitiveDrawable(new Color(50, 50, 50)),
            //Dims the background
            stageBackground = new PrimitiveDrawable(new Color(0, 0, 0, 150))
        };

        var dialog = new Dialog(title, style);
        dialog.getTitleLabel().getStyle().background = new PrimitiveDrawable(new Color(55, 100, 100));
        dialog.pad(20, 5, 5, 5);
        dialog.addText(messageText);
        var exitButton = new TextButton(closeButtonText, skin);
        exitButton.onClicked += butt => dialog.hide();
        dialog.add(exitButton);


        return dialog;
    }


}
}

在运行到另一个实体并按“ E”时,将调用interact()。 这会导致所有内容正确渲染,但我无法单击按钮。

另外: 当我尝试查看exitButton坐标时,尽管对话框出现在窗口中间,但它们始终为0

Monogame版本:3.7 Nez版本:0.9.2

更新: 因此,似乎按钮是可单击的,但是其单击框甚至与真正呈现按钮的位置几乎不对齐。

UPDATE2: 似乎问题在于呈现按钮的位置与实际单击框的位置不同。 我将相机放大了2倍,相机也跟随了我的小角色。对话框将出现在相对于当前摄像机视图的X,Y处,但实际的单击框是根据TiledMap(并不总是显示在屏幕上)出现在X,Y处。 不太确定如何解决此问题。

1 个答案:

答案 0 :(得分:0)

所以!我遇到的问题是我整个过程都使用一个渲染器(RenderLayerRenderer。)要解决此问题,我要做的就是启动另一个渲染器(ScreenSpaceRenderer)。这使我可以使用它来呈现UI,并且它的XY变量不会改变,而对于视觉区域只是静态的。

所以我最终得到了两个这样的渲染器:

addRenderer(new RenderLayerRenderer(0,new int[] { (int)RenderLayerIds.First, (int)RenderLayerIds.Second, (int)RenderLayerIds.Third}));
addRenderer(new ScreenSpaceRenderer(1, new int[] { (int)RenderLayerIds.UILayer }));

在我的游戏渲染中使用第一个,在HUD东西中使用底部!