1. 場景物體的組成
所有放到3D場景中的物體都是一個Spatial,Spatial有兩種類型:Geometry和Node
Geometry(幾何體)描述的是物體的外觀,是我們能夠看到的;Node描述的是物體的組合,將幾何體關聯起來,是不可見的。
每個JME應用都有一個根節點rootNode,繼承了SimpleApplication則自動繼承了該對象,每個要渲染的物體都要附加在這個rootNode上。
移動一個Node,則附加在其上的Geometry、子Node、子Node的Geometry都跟着移動
操作:
創建:new
移動:move
附加:attachChild
移除附加:detachChild
旋轉:rotate
配置用戶自定義數據到渲染物體上:
pivot.setUserData("pivot id",42 )
int id = pivot.getUserData( "pivot id" );
2. 資源Assets管理
assets包括模型、材料、紋理、場景、顏色、聲音、字體等。
默認的文件存放方式是,將文件存放在類路徑classpath下的assets文件夾下;也可以自定義資源存放的位置:assetManager.registerLocator("myAssets", FileLocator.class); “myAssets”是項目下的一個普通文件夾,可選ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, 和 UrlLocator方式。
可以使用JME SDk或者Blender(導出爲ogre xml)來創建模型和場景。但XML/OBJ文件只有在開發階段可用,發佈時使用JME優化的.j3o格式文件,可以在JME SDK裏進行轉換:文件右鍵-》convert to jme3 binary
使用assetManager.loadModel加載資源文件。
Spatial scene = assetManager.loadModel("Scenes/town/main.j3o");
rootNode.attachChild(scene);
3. 每幀刷新
重寫SimpleApplication的simpleUpdate方法,在SimpleInit方法執行後將重複執行simpleUpdate方法,每次update都自動重繪屏幕。
tpf:time per frame,即每秒的幀數
經驗編程指導:
1)把simpleInit裏的代碼移到AppStates.
2)把simpleUpdate的代碼移到Custom Controls.
4. 出現的問題
1)在運行JME應用時,總會先彈出屬性配置窗口,想把這個窗口去掉:app.setDisplayStatView(false);
2)遊戲窗口鼠標自動關聯攝像頭,想把這個去掉:flyCam.setEnabled(false);
3)希望去掉遊戲窗口左下角的幀信息:app.setDisplayFps(false);