anchor.diff:  = Best Practices For jME3 Developers
  -:author:
  -:revnumber:
  -:revdate: 2017/11/26 13:30
  -:relfileprefix: ../../
  -:imagesdir: ../..
  -:stylesheet: twemoji-awesome.css
  -ifdef::env-github,env-browser[:outfilesuffix: .adoc]
  +:revnumber: 2.0
  +:revdate: 2020/07/14
   
   
   Every milestone of a game development project is made up of phases: Planning, development, testing, and release. Every milestone involves updates to multi-media assets and to code.
  
positive.code: 
  |===
  
  Learn details about the <<jme3/intermediate/multi-media_asset_pipeline#,Multi-Media Asset Pipeline>> here.
  
  
  == Development Phase
  
negative.code: 
  === The Smart Way to Access Game Features
  
  xref:ROOT:jme3/intermediate/simpleapplication.adoc[SimpleApplication] gives you access to game features such as a the rootNode, assetManager, guiNode, inputManager, audioManager, physicsSpace, viewPort, and the camera. But what if you need this access also from another class? Don't extend SimpleApplication a second time, and don't pass around tons of object references in constructors! Needing access to application level objects is a sign that this class should be designed as an xref:ROOT:jme3/advanced/application_states.adoc[AppState] (read details there).
  
  An AppState has access to all game features in the SimpleApplication via the `this.app` and `this.stateManager` objects. Examples:
  
  