works internally to avoid full-scene graph traversals once per frame. Random unrelated things first: Spatial constructors were modified to be protected since it is an abstract class and it's good practice. I also flipped them to be this(default values) instead of this() to delegate constructors. Geometry and Node constructors were modified in similar ways to at least call the this(name) version of the constructor everywhere. removeControl(Class) was modified to do what it's javadoc says and only remove the first encountered control. Prior to this change, it was removing all matching controls. The meaty stuff: Node.updateLogicalState() no longer traverses all children and never traverses any children at all unless it is the root. If it is the root node, it keeps a list of all Spatials that require updates and only iterates that list. Spatial was modified to have a package-private requiresUpdates() method that returns true if the requiresUpdates flag is set or the Spatial has controls. The requiresUpdates flag can be set by subclasses that require updateLogicalState() to be called even if they have no controls. (BitmapText is such an example.) By default, subclasses will _always_ have this flag set to true, ie: default to the OLD behavior and avoid silently breaking. Subclasses that wish to have the new-hotness optimal behavior must call setRequiresUpdates(false) in their constructors. They can opt in to better performance rather than silently breaking with an upgrade. The only negative side effect of this change (other than slightly increased complexity) is that for large scene graphs with lots and lots of controls or children requiring updates, a large list of spatials will be kept in the root node. This will never exceed "number of spatials in the scene graph" and so already had a fairly small upper bound with the old code due to performance. I think I've captured all of the edge cases... but we'll see. :) Stress test example to follow.
jMonkeyEngine
jMonkeyEngine is a 3D game engine for adventurous Java developers. It’s open source, cross platform and cutting edge. And it is all beautifully documented. The 3.0 branch is the latest stable version of the jMonkeyEngine 3 SDK, a complete game development suite. We'll be frequently submitting stable 3.0.x updates until the major 3.1 version arrives in Q4 2014.
The engine is used by several commercial game studios and computer-science courses. Here's a taste:
- jME powered games on IndieDB
- Maker's Tale
- Boardtastic 2
- Copod
- Attack of the Gelatinous Blob
- Chaos
- Mythruna
- PirateHell
- 3089 (on steam)
- 3079 (on steam)
Getting started
Go to http://hub.jmonkeyengine.org/downloads/ to download the jMonkeyEngine SDK. Read the wiki for a complete install guide. Power up with some SDK Plugins and AssetPacks and you are off to the races. At this point you're gonna want to join the forum so our tribe can grow stronger.
Technology Stack
- Java
- NetBeans Platform
- Gradle
Plus a bunch of awesome libraries & tight integrations like Bullet, Blender, NiftyGUI and other goodies.
Documentation
Did you miss it? Don't sweat it, here it is again.
Contributing
Read our contribution guide.
License
New BSD (3-clause) License. In other words, you do whatever makes you happy!