首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JME3引擎与nullPointerException

JME3引擎与nullPointerException
EN

Stack Overflow用户
提问于 2014-03-20 14:49:35
回答 1查看 774关注 0票数 2

因此,这个问题是针对那些熟悉jMonkey 3引擎的人。我的simpleUpdate()循环中有这样的代码:

代码语言:javascript
复制
@Override
    public void simpleUpdate(float lastTimePerFrame) {
        if (load) {
            if (frameCount == 1) {
                Element element = nifty.getScreen("loadlevel").findElementByName("loadingtext");
                textRenderer = element.getRenderer(TextRenderer.class);
                inputManager.setCursorVisible(true);
                flyCam.setDragToRotate(true);
                CubesTestAssets.registerBlocks();

                setProgress(0.2f, "Registering Blocks");
            } else if (frameCount == 2) {
                initBlockTerrain();

                setProgress(0.4f, "Generating Chunk");
            } else if (frameCount == 3) {
                initControls();
                initPlayer();

                setProgress(0.6f, "Setting Up Player");
            } else if (frameCount == 4) {
                viewPort.setBackgroundColor(ColorRGBA.Cyan);

                setProgress(0.8f, "Creating Sky");
            } else if (frameCount == 5) {
                inputManager.setCursorVisible(false);
                flyCam.setDragToRotate(false);

                setProgress(1.0f, "Done");
            } else if (frameCount == 6) {
                nifty.gotoScreen("end");
                nifty.exit();
                guiViewPort.removeProcessor(niftyDisplay);
            }
            frameCount++;
        }
        cubesSettings = CubesTestAssets.getSettings(this);
        playerControl = new CharacterControl();
        float playerMoveSpeed = ((cubesSettings.getBlockSize() * 2.5f) * lastTimePerFrame);
        Vector3f camDir = cam.getDirection().mult(playerMoveSpeed);
        Vector3f camLeft = cam.getLeft().mult(playerMoveSpeed);
        walkDirection.set(0, 0, 0);
        if(arrowKeys[0]){ walkDirection.addLocal(camDir); }
        if(arrowKeys[1]){ walkDirection.addLocal(camLeft.negate()); }
        if(arrowKeys[2]){ walkDirection.addLocal(camDir.negate()); }
        if(arrowKeys[3]){ walkDirection.addLocal(camLeft); }
        walkDirection.set(0, 0, 0);
        walkDirection.setY(0);
        playerControl.setWalkDirection(walkDirection);
        cam.setLocation(playerControl.getPhysicsLocation());
    }

我只剩下这个nullPointerException:

代码语言:javascript
复制
SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]
java.lang.NullPointerException
    at com.jme3.bullet.objects.PhysicsCharacter.setWalkDirection(PhysicsCharacter.java:115)
    at com.bminus.Main.simpleUpdate(Main.java:219)
    at com.jme3.app.SimpleApplication.update(SimpleApplication.java:242)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:151)
    at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:185)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:228)
    at java.lang.Thread.run(Thread.java:744)

第219行是这一行:

代码语言:javascript
复制
playerControl.setWalkDirection(walkDirection);

我已经检查过了,playerControlwalkDirection都不是空的。我的问题是:还有什么可能是空的?如何修复此错误?为什么会发生这种情况?我怎样才能防止这种情况在未来发生?在这个问题上的任何帮助都将是非常感谢的,如果你需要看到完整的代码,只需问!我很高兴和你一起分享!提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-20 15:16:06

如果不使用参数实例化CharacterControl,则不会初始化PhysicsCharacter类中的character成员。

完整的追踪将是:

代码语言:javascript
复制
=>  simpleUpdate()
    =>  playerControl.setWalkDirection()
        =>  character.setWalkDirection(Converter.convert(walkDirection, tempVec));
            => NullPointerException on character object

当您调用方法playerControl.setWalkDirection时,这就是问题所在。

因此,您必须使用另一个构造函数,如CharacterControl(CollisionShape shape, float stepHeight)

代码语言:javascript
复制
CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(1.5f, 6f, 1);
playerControl = new CharacterControl(capsuleShape, 0.5f);

有关参数值和其他内容,请参见:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22536622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档