Как заставить обработчик обновления сцены прерваться, когда действие завершено (AndEngine)?

1

Я пытаюсь увеличить масштаб спрайта с помощью обработчика обновлений. Тем не менее, он не позволяет вызывать событие события сцены, поэтому спрайт продолжает увеличиваться по размеру. Как заставить обработчик обновления прерываться, когда действие завершено? Это то, что у меня есть:

Обработчик обновления:

scene.registerUpdateHandler(new IUpdateHandler() {

        @Override
        public void reset() {         
        }

        @Override
        public void onUpdate(float pSecondsElapsed) {
            if(fillerNum>-1){
                if(filler[fillerNum].active){

                    mPhysicsWorld.unregisterPhysicsConnector(mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(filler[fillerNum].sprite));
                    mPhysicsWorld.destroyBody(filler[fillerNum].body);

                    filler[fillerNum].sprite.setScale(filler[fillerNum].scale+=pSecondsElapsed*3);

                    filler[fillerNum].body = PhysicsFactory.createCircleBody(mPhysicsWorld, filler[fillerNum].sprite, BodyType.DynamicBody, FIXTURE_DEF);
                    mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(filler[fillerNum].sprite, filler[fillerNum].body, true, true));
                }
            }               
        }
    });

И событие касания сцены:

@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
     if(this.mPhysicsWorld != null) {
            if(pSceneTouchEvent.isActionDown()) {
                createFiller(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
                return true;
            }
            if(pSceneTouchEvent.isActionUp()){
                Log.e("Action UP", Boolean.toString(filler[fillerNum].active));
                createStationaryFiller();
            }
        }
    return false;
}
Теги:
handler
andengine

1 ответ

1

Просто сохраните экземпляр UpdateHandler:

handler = new IUpdateHandler() {... etc

и когда вы хотите остановить его, вызовите scene.unregisterUpdateHandler(handler)

  • 0
    Я думал об этом, но мой isactionup никогда не регистрируется (оператор log никогда не выполняется), и именно здесь я бы хотел вызвать scene.unregisterUpdateHandler (handler), верно?
  • 0
    TouchEvent даже срабатывает, когда вы поднимаете палец? Поместите некоторый вывод журнала перед оператором if и посмотрите. Может быть, попробуйте вместо этого проверить pSceneTouchEvent.getAction () == MotionEvent.ACTION_UP. Я не думаю, что это поможет, но стоит попробовать.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню