Java 添加多个相同精灵时,如何指定要分离的精灵?
我有我写过的这个方法,在矿石精灵顶部显示一块空岩石,一旦从中开采出资源,经过一段时间后,应该消失,这样矿石就可以再次开采,就像runescape一样 它显示了采矿后的空矿,但问题是,在五个矿石中,只有一个空矿精灵会消失,其余的总是留在那里。我想这是因为当它被调用时,它不知道哪个是空精灵。有没有办法让它们独一无二,或者有没有其他办法Java 添加多个相同精灵时,如何指定要分离的精灵?,java,android,andengine,sprite,Java,Android,Andengine,Sprite,我有我写过的这个方法,在矿石精灵顶部显示一块空岩石,一旦从中开采出资源,经过一段时间后,应该消失,这样矿石就可以再次开采,就像runescape一样 它显示了采矿后的空矿,但问题是,在五个矿石中,只有一个空矿精灵会消失,其余的总是留在那里。我想这是因为当它被调用时,它不知道哪个是空精灵。有没有办法让它们独一无二,或者有没有其他办法 public static void emptyOre(final float oreX, final float oreY, float displayTime){
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
但是,您将无法从此方法外部访问此实例。通常,您需要将实例保存到列表或映射中。取决于您希望如何访问它们