javajmonkeyenginenifty-gui

Nifty GUI Layout


I am new to JME3 game engine but I know Android XML GUI layouts pretty good. I have a simple layout here and I cant figure out what is wrong. Here is my XML code:

<?xml version="1.0" encoding="UTF-8"?>
<nifty xmlns="http://nifty-gui.sourceforge.net/nifty-1.3.xsd"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://nifty-gui.sourceforge.net/nifty-1.3.xsd
                       http://nifty-gui.sourceforge.net/nifty-1.3.xsd">

<useControls filename="nifty-default-controls.xml" />
<useStyles filename="nifty-default-styles.xml" />

<screen id="start" controller="com.jasoncrosby.game.farkle.gui.MenuScreenGui">
    <layer id="layer" backgroundColor="#66CD00" childLayout="center">
        <panel id="panel" align="center" valign="center" childLayout="center" visibleToMouse="true">
            <image filename="Textures/wood_floor.png" height="95%" width="95%"/>

            <panel id="panel" align="center" valign="center" childLayout="center" visibleToMouse="true">
                <text text="test" font="Interface/Fonts/Eraser.fnt"></text>
            </panel>
        </panel>
    </layer>
</screen>

Everything works good until I get to displaying the text. I have tried different alignments and tried moving the text into different panels but no matter what I do the text is never in the center of the screen. Its always in the upper left corner so far I can only see the lower right part of the text. I'm sure it has to be something simple but since I'm new to this I'm not noticing anything. Thanks for the help in advance.


Solution

  • You're probably using an old Nifty version. Your first panel with the id="panel" uses childLayout="center" and it has two child elements (an image and another panel). This was not supported in Nifty versions prior to 1.3.1.

    Here is a quote from the Nifty Manual PDF:

    Another thing that has been improved in Nifty 1.3.1 is that childLayout=“center“ now supports more than one child element! In versions prior 1.3.1 childLayout=“center“ would only support a single child elements and odd things would happen to the other elements. This has now been improved as well and childLayout=“center“ supports more than one child element.

    I've tried your XML with Nifty 1.3.2 and the text is in the center of the screen.

    PS: Not related to your problem: It's not a good idea to use the same id for multiple elements (you have two panels with id="panel"). Nothing bad will happen (besides a warning in the log) but when you try to do a findElementByName() you might end up with some unexpected element.