com.jme3.app.SimpleApplication 类是继承 com.jme3.app.Application类。Application 类表示一个通用的实时 3D 渲染 JME3 应用程序(也就是说,不一定是游戏)。一般是不会直接继承 com.jme3.app.Application 来创建游戏的,而是继承 com.jme3.app.SimpleApplication 类。
Application 默认字段 / 方法 | 介绍 |
---|---|
viewPort / getViewPort() | 默认相机的视图对象。 |
settings / setSettings() | 使用这个 AppSettings 对象指定显示宽度和高度(默认值为640x480)、颜色位深度、z-buffer、反锯齿示例,以及更新频率、视频和音频渲染器、资产管理器。 |
cam / getCamera() | 默认相机提供透视投影,45° 视角,近平面 = 1个单位,远平面 = 1000 个单位。 |
assetManager / getAssetManager() | 资源管理器,用于管理加载模型、纹理、材质、声音等的路径。默认情况下,Asset Manager 路径相对于项目的根目录。 |
audioRenderer / getAudioRenderer() | 音频渲染器。 |
listener / getListener() | 音频监听器。 |
inputManager / getInputManager() | 使用 inputManager 配置自定义输入(鼠标移动、单击、按键等)并设置鼠标指针可见性。 |
stateManager / getStateManager() | 应用程序的状态管理器。 |
方法 | |
setPauseOnLostFocus(true) | 当窗口失去焦点时游戏循环是否应该停止运行(典型的单人游戏)。对于实时和多人游戏,设置为 false。 |
start() | 调用这个方法来启动一个 JME3 游戏。默认情况下,这会打开一个新的 JME3窗口,初始化场景,并启动事件循环。 |
restart() | 将修改后的 AppSettings 加载到当前应用程序上下文中。 |
stop() | 停止运行 JME3 游戏并关闭 JME3 窗口。 |
启动(类型Type. 无头Headless)等 | 当启动游戏应用的时候切换上下文的com.jme3.system.JmeContext.Type。
|
内部类字段方法 | |
context / getContext() | 应用程序上下文, 包含renderer、 AppSettings、timer等,通常不直接访问上下文对象。 |
inputEnabled | 如果希望系统监听用户输入,这个内部布尔值为 true; 如果您只想播放非交互式场景,则为 false。使用 AppSettings 更改布尔值。 |
keyInput,mouseInput、joyInput, touchInput | 键盘、鼠标和操纵杆的默认输入上下文。内部使用,以使操纵杆或触摸设备的处理。基类包含按键和鼠标按钮枚举。 |
renderManager / getRenderManager()、renderer / getRenderer(); | 低级和高级的渲染接口。主要用于内部。 |
guiViewPort / getGuiViewPort() | 正交 GUI 视图的视图对象。仅在内部用于 HUD。 |
timer | 内部更新循环计时器,不要使用。参见下面的 simpleUpdate ()中的 tpf 来了解计时器。 |
paused | 只有在运行时内部使用布尔值来暂停/解除游戏。(您需要实现自己的 isRunning 布尔值。) |
每个 jme3 游戏都是 com.jme3.app.SimpleApplication 类的一个实例,SimpleApplication 允许您访问标准的游戏特性,例如场景图(rootNode)、资产管理器、用户界面(guiNode)、输入管理器、音频管理器、物理模拟和一个实时摄像头。在游戏实例上调用 app.start ()和 app.stop ()来启动或退出应用程序。这些是游戏引擎的核心特性。您需要实现这个类来创建您的游戏。
SimpleApplication 默认字段 / 方法 | 介绍 |
---|---|
rootNode / getRootNode() | 场景图的根节点。如果附加(attach)一个模型(Spatial) 到 rootNode,它将出现在 3D 场景中。 |
guiNode / getGuiNode() | 将平面 GUI 元素(例如 HUD 图像和文本)附加到这个正交的 GUI 节点上,使它们显示在屏幕上。 |
flyCam / getFlyByCamera() | 默认的第一人称 fly-by 摄像机控件。这个默认的摄像机控件可以让你使用预先配置的 WASD 和箭头键以及鼠标来控制操作 3D 场景。 |
方法 | |
loadStatsView(); | 调用此方法将实时统计信息打印到屏幕上,例如当前帧/秒和三角形/顶点计数。一般只在开发或调试期间使用此信息。 |
loadFPSText(); | 调用此方法在屏幕上打印当前帧/帧率。 |
setDisplayFps(false); | 默认的 SimpleApplication 在屏幕上显示帧帧率。您可以选择使用此命令停用 FPS 显示。 |
setDisplayStatView(false); | com.jme3.app.StatsView 在屏幕上显示网格统计信息。这些信息在开发和调试阶段是有价值的,但是对于发布,你应该隐藏统计 HUD。注意: 在统计数据后面有一个黑色的四边形。统计数据中显示的每个字母都是一个四边形。每个四边形有4个顶点和2个三角形。456/2 = 228,912/4 = 228这意味着如果你显示统计数据,将有456个三角形和912个顶点显示在统计数据视图除了你自己添加的东西。 |
public void simpleRender(RenderManager rm) | 可选: 如果需要直接修改 frameBuffer 和场景图,高级开发人员可以重写此方法。 |
使用 app.setShowSettings(true); 在开始游戏时显示一个 SplashScreen 和内置显示设置对话框; 或者使用 app.setShowSettings (false) ; 隐藏内置屏幕(在这种情况下,您可能希望提供一个自定义的 SplashScreen 和设置面板)。在调用 SimpleApplication 的 main ()方法中的 app.start ()之前设置这个布尔值。
下面的默认3D场景输入操作由 SimpleApplication 中的默认 flyCam 摄像机实现,您可以使用这些映射进行调试和测试,直到实现自定义输入处理。
Key | 事件 |
---|---|
KEY_ESCAPE | 通过调用 app.stop ()退出游戏 |
KEY_C | 调试键: 打印相机的位置、旋转和方向。 |
KEY_M | 调试键: 打印内存使用状态。 |
F5 | 隐藏或显示左下角的统计数据。 |
flyCam | |
KEY_W | 向前 |
KEY_A | 向左 |
KEY_S | 向后 |
KEY_D | 向右 |
KEY_Q | 垂直向上 |
KEY_Z | 垂直向下 |
KEY_LEFT或者水平左移鼠标 (-x) | 左旋转 |
KEY_RIGHT或将鼠标水平右移(+x) | 右旋转 |
KEY_UP或者将鼠标垂直向前移动(+y) | 旋转上升 |
KEY_DOWN或者垂直向后移动鼠标(-y) | 旋转下降 |
BUTTON_LEFT或按住鼠标左键拖动旋转 | 旋转 |
AXIS_WHEEL或者将鼠标滚轮向后滚动 | 缩小 |
AXIS_WHEEL或者将鼠标滚轮向前移动 | 放大 |
默认情况下,SimpleApplication 默认的AppStates是 new StatsAppState(),配置了调试输出键(new DebugKeysAppState()) ,并启用 flyCam (new FlyCamAppState())。这些都是可以自定义的。
下面的例子如何删除一个默认的 AppStates,在这个例子中是 FlyCamAppState:
public MyApplication() {
super( new StatsAppState(), new DebugKeysAppState() );
}
public void simpleInitApp() {
stateManager.detach( stateManager.getState(FlyCamAppState.class));
...
import com.jme3.app.SimpleApplication;
public class MyBaseGame extends SimpleApplication {
public static void main(String[] args){
MyBaseGame app = new MyBaseGame();
app.start();
}
@Override
public void simpleInitApp() {
/* 在这里初始化游戏场景 */
}
@Override
public void simpleUpdate(float tpf) {
/* 在主循环中与游戏事件相互作用 */
}
@Override
public void simpleRender(RenderManager rm) {
/* (可选)对 frameBuffer 和场景图进行高级修改 */
}
}
你可以从标准的main方法启动JME3游戏。
public class HelloJME3 extends SimpleApplication {
public static void main(String[] args){
HelloJME3 app = new HelloJME3();
app.start();
}
@Override
public void simpleInitApp() {
}
}
simpleInitApp() 方法在应用程序开始时自动调用一次。每一个 jme3 游戏都必须有这个方法。在 simpleInitApp() 方法中,在游戏开始之前加载游戏对象。比如如下为创建一个蓝色立方体的代码:
public void simpleInitApp() {
Box b = new Box(1, 1, 1); // 创建一个1x1x1的盒子形状
Geometry geom = new Geometry("Box", b); // 根据盒子的形状创建一个立方体几何体
Material mat = new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md"); // 创建一个简单的材质
mat.setColor("Color", ColorRGBA.Blue); // 将材质的颜色设置为蓝色
geom.setMaterial(mat); // 设置立方体的材质为mat
rootNode.attachChild(geom); // 让立方体的几何图形出现在场景中
}
一个典型的 jme3 游戏有以下初始化过程: