Hello everyone
I’ve seen topic, where someone complained about SimpleApp class. So, here is simplest and lightest version
game.SimpleGame.class
[java]
/**
-
SimpleGame - light version of com.jme3.app.SimpleApplication
-
@author …
-
@since …
-
@version …
*/
public abstract class SimpleGame extends Application
{
// -------------------------------------------------------- \
// ===========================================================
// Constants
// ===========================================================/** Root Node **/
protected final Node rootNode = new Node(“Root Node”);/** GUI Node **/
protected Node guiNode = new Node(“Gui Node”);/** Show application settings ? **/
private boolean showSettings;// ===========================================================
// Fields
// ===========================================================
// ===========================================================
// Constructors
// ===========================================================/**
- Default constructor
*/
public SimpleGame( )
{
super( );
}
// ===========================================================
// Getter & Setter
// ===========================================================/**
- Retrieves guiNode
- @return guiNode Node object
*/
public final Node getGuiNode( ) { return guiNode; }/**
- Retrieves rootNode
- @return rootNode Node object
*/
public final Node getRootNode( ) { return rootNode; }/**
- <b>Sets showSettings</b>
- <br>
- <i>If showSettings == true => JME3 settings windows will be shown.
- <br>
- <u>Default value of showSettings is false</u></i>
- <br>
- <br>
-
@param pValue - <i>value to set</i>
*/
public final void setShowSettings( final boolean pValue ) { showSettings = pValue; }
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================@Override
public final void start( )
{
// set some default settings in-case
// settings dialog is not shown
boolean loadSettings = false;
if (settings == null) {
setSettings(new AppSettings(true));
loadSettings = true;
}// show settings dialog if (showSettings) { if (!JmeSystem.showSettingsDialog(settings, loadSettings)) { return; } } //re-setting settings they can have been merged from the registry. setSettings(settings); super.start();
}
@Override
public final void initialize( )
{
super.initialize();guiNode.setQueueBucket( Bucket.Gui ); guiNode.setCullHint( CullHint.Never ); viewPort.attachScene( rootNode ); guiViewPort.attachScene( guiNode ); onInit( );
}
@Override
public final void update( )
{
super.update( );// makes sure to execute AppTasksif (speed == 0 || paused) return; final float tpf = timer.getTimePerFrame() * speed; // update states stateManager.update(tpf); // simple update and root node onUpdate(tpf); rootNode.updateLogicalState(tpf); guiNode.updateLogicalState(tpf); rootNode.updateGeometricState(); guiNode.updateGeometricState(); // render states stateManager.render(renderManager); renderManager.render(tpf, context.isRenderable()); onRender(renderManager); stateManager.postRender();
}
// ===========================================================
// Methods
// ===========================================================/**
- <i><b>Override this method to handle initialization</b></i>
- <br>
- <br>
*/
protected abstract void onInit( );
/**
- <i><b>Override this method to handle logic update</b></i>
- <br>
- <br>
-
@param timePerFrame - <i>time since last update called</i>
*/
protected abstract void onUpdate( final float timePerFrame );
/**
- <i><b>Override this method to handle render</b></i>
- <br>
- <br>
-
@param renderManager - <i>RenderManager</i>
*/
protected abstract void onRender( final RenderManager renderManager );
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
// -------------------------------------------------------- \
}
[/java] - Default constructor
Since it has protected access to methods, subclasses must be in same package
And here is an example:
game.Game.class
[java]
public final class Game extends SimpleGame
{
// -------------------------------------------------------- \
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
// ===========================================================
// Constructors
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
protected final void onInit( )
{
}
@Override
protected final void onUpdate( final float timePerFrame )
{
}
@Override
protected final void onRender( final RenderManager renderManager )
{
}
// ===========================================================
// Methods
// ===========================================================
public final static void main( final String[] args )
{
//Create game
final Game game = new Game( );
//Create AppSettings
final AppSettings settings = new AppSettings( true );
//Set App settings
game.setSettings( settings );
//Disable default settings screen
game.setShowSettings( false );
game.start( );
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
// -------------------------------------------------------- \\
}
[/java]
In practice, SimpleApp is better to use, since it has all-in-one.