gpt4 book ai didi

sprite - 使用 Andengine 安全删除 Sprite

转载 作者:行者123 更新时间:2023-12-01 15:29:12 25 4
gpt4 key购买 nike

我正在创建许多在屏幕上随机弹跳的小球 Sprite 。触摸时,我希望将球从场景中移除。 (如果有多个球占据同一空间,则此时也会将其移除)。

我意识到 scene.detachChild 必须在 runOnUpdateThread 上运行,所以在我的 Ball Sprite 子类中,我通过重写 onAreaTouched 在触摸时分离 Child:

        @Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY)
{
((BaseGameActivity) thisAct).runOnUpdateThread(new Runnable() {
@Override
public void run() {
/* Now it is save to remove the entity! */


//scene.unregisterTouchArea(Ball.this);
scene.detachChild(Ball.this);

}
});
return false;
}

我必须将主 Activity 传递给球 Sprite 的构造函数,然后从主 Activity 场景中移除球。

如果我取消注释 scene.unregisterTouchArea(Ball.this) 行,以停止 Sprite 对触摸起作用(这不影响移除,但我认为最好停止正在处理的触摸),我将收到 indexOutOfBoundsException我认为这与不从 runOnUpdateThread 中分离 Sprite 有关。

**java.lang.IndexOutOfBoundsException: Invalid index 90, size is 90
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
at java.util.ArrayList.get(ArrayList.java:311)
at org.anddev.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:320)**

两个问题:

  1. 在球子类中使用覆盖 onAreaTouched 来处理 Sprite 的移除是否正确,或者我是否应该以某种方式将移除返回到主要事件中(首先我需要一个子类)?

  2. 知道为什么我在包含 unregisterTouchArea 时会收到 IndexOutOfBoundsException 吗?

感谢您的帮助。

最佳答案

切勿在 TouchListener 中删除。您应该坚持使用 IUpdateHandler

1.) 没有必要子类化您可能会在可以访问场景的任何地方进行删除。

2.) IndexOutOfBoundException 发生是因为您在 TouchListener 中执行了删除操作。在您删除 Sprite 时,可能有一些方法向场景添加了新事物。将删除放在 UpdateHandler 中可以解决这个问题。

关于sprite - 使用 Andengine 安全删除 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com