Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过引用传递的精灵使用andengine GLES2导致空指针异常_Java_Android_Nullpointerexception_Opengl Es 2.0_Andengine - Fatal编程技术网

Java 通过引用传递的精灵使用andengine GLES2导致空指针异常

Java 通过引用传递的精灵使用andengine GLES2导致空指针异常,java,android,nullpointerexception,opengl-es-2.0,andengine,Java,Android,Nullpointerexception,Opengl Es 2.0,Andengine,当我在参数中传递sprite并在方法中初始化该对象,但在方法中传递的对象引用仍然为null时。这是我的方法 public void createAndLoadSimpleSprite(Sprite sprite ,String name, SimpleBaseGameActivity activity, int width, int height) { BitmapTextureAtlas atlasForBGSprite = new BitmapTextureAtla

当我在参数中传递sprite并在方法中初始化该对象,但在方法中传递的对象引用仍然为null时。这是我的方法

public void createAndLoadSimpleSprite(Sprite sprite ,String name,
        SimpleBaseGameActivity activity, int width, int height) {

    BitmapTextureAtlas atlasForBGSprite = new BitmapTextureAtlas(
            activity.getTextureManager(), width, height);
    TextureRegion backgroundSpriteTextureRegion = BitmapTextureAtlasTextureRegionFactory
            .createFromAsset(atlasForBGSprite, activity, name, 0, 0);
    sprite = new Sprite(0, 0, backgroundSpriteTextureRegion,
            activity.getVertexBufferObjectManager());
    activity.getTextureManager().loadTexture(atlasForBGSprite);

}
这就是我所说的

createAndLoadSimpleSprite(defualtCageSprite,"bg.png", this, 450, 444);

但是访问defaultCageSprite仍然会引发空指针异常。。。我不确定这是否是一个发动机问题。但是,如果没有,我们就不能将精灵作为参数传递给AndEngine吗?

这不是AndEngine的问题。您正在处理Java的工作方式。AFAIK不可能有输出参数。您需要做的是使用“返回”或创建字段来保存数据。

这不是一个AndEngine问题。您正在处理Java的工作方式。AFAIK不可能有输出参数。您需要做的是使用“返回”或创建字段来保存数据。

您必须更改返回精灵对象的方法:

public Sprite createAndLoadSimpleSprite(String name,
    SimpleBaseGameActivity activity, int width, int height) {

BitmapTextureAtlas atlasForBGSprite = new BitmapTextureAtlas(
        activity.getTextureManager(), width, height);
TextureRegion backgroundSpriteTextureRegion = BitmapTextureAtlasTextureRegionFactory
        .createFromAsset(atlasForBGSprite, activity, name, 0, 0);
activity.getTextureManager().loadTexture(atlasForBGSprite);

Sprite sprite = new Sprite(0, 0, backgroundSpriteTextureRegion,
        activity.getVertexBufferObjectManager());

return sprite;

}
现在您可以拨打:

defualtCageSprite = createAndLoadSimpleSprite("bg.png", this, 450, 444);

不要忘记将精灵附加到
场景

必须更改方法才能返回精灵对象:

public Sprite createAndLoadSimpleSprite(String name,
    SimpleBaseGameActivity activity, int width, int height) {

BitmapTextureAtlas atlasForBGSprite = new BitmapTextureAtlas(
        activity.getTextureManager(), width, height);
TextureRegion backgroundSpriteTextureRegion = BitmapTextureAtlasTextureRegionFactory
        .createFromAsset(atlasForBGSprite, activity, name, 0, 0);
activity.getTextureManager().loadTexture(atlasForBGSprite);

Sprite sprite = new Sprite(0, 0, backgroundSpriteTextureRegion,
        activity.getVertexBufferObjectManager());

return sprite;

}
现在您可以拨打:

defualtCageSprite = createAndLoadSimpleSprite("bg.png", this, 450, 444);

别忘了将精灵附加到
场景

是的,我以完全相同的方式更改了此方法。。但我需要在类的构造函数中传递sprite,这样每个对象都有自己的sprite引用。所以我想通过Sprite作为参考。我不明白你想要实现什么,但这是一个JAVA问题,尝试在你的问题中添加一个
JAVA
标记。你是对的。我的坏:)。再次忽略变量()的作用域。谢谢,我用同样的方法改变了这个方法。。但我需要在类的构造函数中传递sprite,这样每个对象都有自己的sprite引用。所以我想通过Sprite作为参考。我不明白你想要实现什么,但这是一个JAVA问题,尝试在你的问题中添加一个
JAVA
标记。你是对的。我的坏:)。再次忽略变量()的作用域。谢谢