Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 添加多个相同精灵时,如何指定要分离的精灵?_Java_Android_Andengine_Sprite - Fatal编程技术网

Java 添加多个相同精灵时,如何指定要分离的精灵?

Java 添加多个相同精灵时,如何指定要分离的精灵?,java,android,andengine,sprite,Java,Android,Andengine,Sprite,我有我写过的这个方法,在矿石精灵顶部显示一块空岩石,一旦从中开采出资源,经过一段时间后,应该消失,这样矿石就可以再次开采,就像runescape一样 它显示了采矿后的空矿,但问题是,在五个矿石中,只有一个空矿精灵会消失,其余的总是留在那里。我想这是因为当它被调用时,它不知道哪个是空精灵。有没有办法让它们独一无二,或者有没有其他办法 public static void emptyOre(final float oreX, final float oreY, float displayTime){

我有我写过的这个方法,在矿石精灵顶部显示一块空岩石,一旦从中开采出资源,经过一段时间后,应该消失,这样矿石就可以再次开采,就像runescape一样

它显示了采矿后的空矿,但问题是,在五个矿石中,只有一个空矿精灵会消失,其余的总是留在那里。我想这是因为当它被调用时,它不知道哪个是空精灵。有没有办法让它们独一无二,或者有没有其他办法

public static void emptyOre(final float oreX, final float oreY, float displayTime){

    emptyOre = new Sprite(oreX, oreY,
            AssetLoaderUtil.emptyOreTextureRegion,
            mContext.getVertexBufferObjectManager());
    SceneManager.mWorldScene.attachChild(emptyOre);
    //SceneManager.mWorldScene.registerTouchArea(emptyOre);
    emptyOre.setVisible(true);
    emptyOre.setZIndex(2);


    TimerHandler spriteTimerHandler;

    float mEffectSpawnDelay = displayTime;

    SceneManager.mWorldScene.registerUpdateHandler(spriteTimerHandler = new TimerHandler(
            mEffectSpawnDelay, new ITimerCallback() {
                @Override
                public void onTimePassed(
                        final TimerHandler pTimerHandler) {

                    mContext.runOnUpdateThread(new Runnable() {

                        public void run() {
                            SceneManager.mWorldScene
                                    .detachChild(emptyOre);
                        }

                    });

                    //SceneManager.mWorldScene.detachChild(emptyOre);

                    //emptyOre.setVisible(false);


                }
            }));


}

我不想让这听起来很刺耳,但你的问题是你不懂基本的Java编程。您已将emptyOre字段定义为静态。即使您忘记在粘贴的代码中包含这个,我可以从事实上看出,您的方法也是静态的

这意味着这个字段只存在于整个类及其每个实例的一个副本中,但您可能只有一个实例。按照创建对象的方式,只保存最后一个清空对象

如果不需要从其他任何地方访问emptyOre,则应在方法的范围内定义它:

final Sprite emptyOre = new Sprite(oreX, oreY,
        AssetLoaderUtil.emptyOreTextureRegion,
        mContext.getVertexBufferObjectManager()); 
请注意,您必须将其设置为final,因为您希望在处理程序的匿名类中使用它。这意味着这个实例是最终的,因为nbody可以更改对另一个实例的引用。这样,匿名类将记住使用哪个emtpyOre,并且当再次调用该方法时,将创建另一个emptyOre

但是,您将无法从此方法外部访问此实例。通常,您需要将实例保存到列表或映射中。取决于您希望如何访问它们