【问题标题】:How do I specify which sprite to detach , when multiple of the same spritre are added?当添加多个相同的精灵时,如何指定要分离的精灵?
【发布时间】:2014-10-26 06:17:09
【问题描述】:

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

它显示开采后的空矿,但问题是,在五块矿石中,只有一个空矿精灵会消失,其余的则一直存在。我认为这是因为当它被调用时,它不知道哪个“emptyOre”精灵是哪个。有没有办法让它们变得独一无二,或者有什么不同的方法可以做到这一点?

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 android andengine sprite


    【解决方案1】:

    我不希望这听起来刺耳,但您的问题是您不了解基本的 Java 编程。您已将 emptyOre 字段定义为 static。即使您忘记将其包含在粘贴的代码中,我也可以从事实中看出,您的方法也是static

    这意味着该字段仅存在于整个类及其每个实例的副本中(但您可能只有一个实例)。您创建对象的方式,只会保存最后一个emptyOre

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

    final Sprite emptyOre = new Sprite(oreX, oreY,
            AssetLoaderUtil.emptyOreTextureRegion,
            mContext.getVertexBufferObjectManager()); 
    

    请注意,您必须将其设为final,因为您想在匿名类(处理程序)中使用它。这个实例是最终的意味着 nbody 可以更改对另一个实例的引用。这样匿名类就会记住要使用哪个emtpyOre,并且当再次调用该方法时,会创建另一个emptyOre

    但是,您将无法从该方法之外访问该实例。通常,您需要将实例保存到列表或地图中。取决于您要如何访问它们。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2012-11-29
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多