[nifty] move effect

I’m trying to slide my menu in “onShow” and out “onHide”. It seems that the effect doesn’t correctly affect child components. If I just apply the effect to the menuPanel, then only the lonely panel moves. If I also apply it to the buttons it contains, then the button background moves, but not the text. Does anyone else have this effect? What am I doing wrong?



http://i.imgur.com/sMDo2.png



Here’s the relevant XML code:



[xml]

<layer id=“menuLayer” backgroundColor="#0007" childLayout=“horizontal” visible=“false”>

<panel id=“menuPanel” width=“150”

style=“nifty-panel-no-shadow” padding=“10px,10px,10px,10px”

align=“center” valign=“center” childLayout=“vertical”>

<effect>

<onShow name=“move” length=“1000” neverStopRendering=“true” mode=“fromOffset” offsetX="-150" />

<onHide name=“move” length=“1000” neverStopRendering=“true” mode=“toOffset” offsetX="-150" />

</effect>

<control id=“startNewGameButton” type=“button” label=“Start new game”

visibleToMouse=“true” width="">

<interact onClick=“onStartNewGameButton()”/>

<effect>

<onShow name=“move” length=“1000” neverStopRendering=“true” mode=“fromOffset” offsetX="-150" />

<onHide name=“move” length=“1000” neverStopRendering=“true” mode=“toOffset” offsetX="-150" />

</effect>

</control>

<control id=“displaySettingsButton” type=“button” label=“Display Settings”

visibleToMouse=“true” width="
">

<interact onClick=“onDisplaySettingsButton()”/>

<effect>

<onShow name=“move” length=“1000” neverStopRendering=“true” mode=“fromOffset” offsetX="-150" />

<onHide name=“move” length=“1000” neverStopRendering=“true” mode=“toOffset” offsetX="-150" />

</effect>

</control>

<control id=“soundSettingsButton” type=“button” label=“Sound Settings”

visibleToMouse=“true” width="">

<interact onClick=“onSoundSettingsButton()”/>

<effect>

<onShow name=“move” length=“1000” neverStopRendering=“true” mode=“fromOffset” offsetX="-150" />

<onHide name=“move” length=“1000” neverStopRendering=“true” mode=“toOffset” offsetX="-150" />

</effect>

</control>

<control id=“backButton” type=“button” label=“Back to game”

visibleToMouse=“true” width="
">

<interact onClick=“onBackButton()”/>

<effect>

<onShow name=“move” length=“1000” neverStopRendering=“true” mode=“fromOffset” offsetX="-150" />

<onHide name=“move” length=“1000” neverStopRendering=“true” mode=“toOffset” offsetX="-150" />

</effect>

</control>

<control id=“creditsButton” type=“button” label=“Credits”

visibleToMouse=“true” width="">

<interact onClick=“onCreditsButton()”/>

<effect>

<onShow name=“move” length=“1000” neverStopRendering=“true” mode=“fromOffset” offsetX="-150" />

<onHide name=“move” length=“1000” neverStopRendering=“true” mode=“toOffset” offsetX="-150" />

</effect>

</control>

<control id=“quitButton” type=“button” label=“Quit”

visibleToMouse=“true” width="
">

<interact onClick=“onQuitButton()”/>

<effect>

<onShow name=“move” length=“1000” neverStopRendering=“true” mode=“fromOffset” offsetX="-150" />

<onHide name=“move” length=“1000” neverStopRendering=“true” mode=“toOffset” offsetX="-150" />

</effect>

</control>

</panel>

</layer>

[/xml]

Sorry, just saw this topic now.



Try this :



[xml]

<effect>

<onShow name=“move” mode=“in” direction=“bottom” length=“1000” startDelay=“0” inherit=“true”/>

<onHide name=“move” mode=“out” direction=“top” length=“1000” startDelay=“0” inherit=“true”/>

</effect>

[/xml]



I don’t use the effects directly in components, I use them in layers instead. Also, I avoid using onShow and onHide, it doesn’t work for me. I use onCustom instead :



[xml]

<effect>

<onCustom customKey=“in” name=“move” mode=“in” direction=“top” length=“800” startDelay=“0” inherit=“true”/>

<onCustom customKey=“out” name=“move” mode=“out” direction=“bottom” length=“800” startDelay=“0” inherit=“true”/>

</effect>

[/xml]



And then you use them in source code:



[java]

public void showElement(final Element element, final EndNotify… endNotify) {

element.showWithoutEffects();

element.startEffect(EffectEventId.onCustom, new EndNotify() {



public void perform() {

for (EndNotify ed : endNotify) {

ed.perform();

}

}

}, “in”);

}



public void hideElement(final Element element, final EndNotify… endNotify) {

element.startEffect(EffectEventId.onCustom, new EndNotify() {



public void perform() {

element.hideWithoutEffect();

for (EndNotify ed : endNotify) {

ed.perform();

}

}

}, “out”);

}

[/java]

1 Like

Thanks Glauco, But I’m too drunk to take any benefit out of your reply. But I appreciate your indefatigable (<= new word for me) efforts to the community. All the best to you and all monkeys. I must take care of a buddy that hangs over the toilet and disposes superfluous vodka. :smiley:



Edit: inherit=“true” is the key. Thanks a lot!

Yeah. I’m indefatigable xD. I didn’t sleep at all last nights ;P. Sleepless nights 8). Great new year!

1 Like