übergänge wie fades o.Ä. kann man auch gut als objekte sehen, die man einfach in eine gui-objektliste packt. diese objekte werden pro frame mit einer update-funktion aufgerufen. ein fade ist dann ein objekt, das über allen anderen spielelementen aber evt. unter den menus usw. liegt. es ist einfach ein schwarzes rechteck in bildschirmgröße, das mit der zeit transparent wird. in der update funktion wird dann zeitabhängig die transparenz hochgesetzt und am ende wird das objekt als "dead" o.ä. markiert - so kann es dann beim nächsten update entfernt werden.
menu-animationen lassen sich ähnlich realisieren - evt. kannst du zusätzlich noch tween-objekte bauen, die innerhalb des updates eines objektes aufgerufen werden, um das objekt in einer bestimmten weise zu verändern...
den tween objekten oder anderen gui elementen wie das fade objekt, könnte man dann noch eine funktion mitgeben die als ereignisbehandler funktioniert. ist bspw. ein fade von transparent nach schwarz fertig, wird die funktion aufgerufen, um weiteres (z.B. anderes level laden) auszulösen...
edit: btw statemanager halte ich persönlich für spiele sozusagen für obligatorisch.