Jmonkey NullPointerException

时间:2015-01-20 03:15:55

标签: java animation nullpointerexception blender jmonkeyengine

这是我用模型加载节点然后附加动画控件的代码。我得到一个NullPointerException,因为它说我的AnimControl为null。

我的动画控制类在Models / stickman.blend / Armature / Cube

Node model = (Node)assetManager.loadModel("Models/stickman.j3o");
control = model.getControl(AnimControl.class);
control.addListener(this);
channel = control.createChannel();
channel.setAnim("jump");
model.scale(0.25f);
model.addControl(physicsCharacter);
getPhysicsSpace().add(physicsCharacter);
rootNode.attachChild(model);

如何摆脱这种nullpointerexception或将AnimControl类从子目录中移出,这样它就不会为空?感谢。

java.lang.NullPointerException
at mygame.Main.simpleInitApp(Main.java:96)
at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:226)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:130)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:207)
at java.lang.Thread.run(Thread.java:744)

enter image description here

1 个答案:

答案 0 :(得分:1)

NullPointerException尽可能清楚地告诉您变量control为空。这反过来意味着model.getControl(AnimControl.class);已返回null。如果没有AnimControl.class类型的控件,则javadoc tells you it will do this

我认为,在查看the tutorial时,您必须将节点附加到rootNode。来自this page

  

每个JME3应用程序都有一个rootNode:您的游戏会自动从SimpleApplication继承rootNode对象。

所以,只要你的班级extends SimpleApplication你只需要添加

rootNode.attachChild(model);

后立即

Node model = (Node)assetManager.loadModel("Models/stickman.j3o");

此附件似乎会自动将您的模型与控件相关联 - 如animation beginners tutorial

中的此片段所示
player = (Node) assetManager.loadModel("Models/Oto/Oto.mesh.xml");
player.setLocalScale(0.5f);
rootNode.attachChild(player);
control = player.getControl(AnimControl.class);