2013-02-25 1 views
0

То, что я пытаюсь достичь, это изменение свойств mRectangles, таких как продолжительность, когда пользователь меняет его в настройках. Я читал, что я могу использовать modifier.reset() с соответствующими аргументами из оригинала. Я не могу понять, что мне нужно передать в четвертом параметре. Есть ли переменная или функция, которую я должен вызвать, чтобы получить правильный контекст?Как обновить модификаторы сущности Andengine?

@Override 
public void onPopulateScene(Scene pScene, 
     OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception { 
    // TODO Auto-generated method stub 

    Rectangle mRectangle = new Rectangle(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT, 
      mEngine.getVertexBufferObjectManager()); 

    // With this anonymous function, you can add events to the beginning and end 
    // of the modified state 
    IEntityModifierListener mIEntityModifierListener = new IEntityModifierListener() { 

     @Override 
     public void onModifierStarted(IModifier<IEntity> pModifier, 
       IEntity pItem) { 
      // Grab the current duration value and compare it to the 
      // one that's stored 
      final int mDuration = (int) pModifier.getDuration(); 
      Log.i("MODIFIER", "Current duration value: " + mDuration); 

      if(mDuration != mDurationPref) 
      { 
       Log.i("UPDATEDURATION","Duration value: " + mDurationPref); 
       mFinalDuration = mDurationPref; 

       pModifier.reset(); 

      } 
      else 
      { 
       Log.i("UPDATEDURATION","Both values match: " + COLORONE_DEFAULT); 
       mFinalDuration = COLORONE_DEFAULT; 
      } 

     } 

     @Override 
     public void onModifierFinished(IModifier<IEntity> pModifier, 
       IEntity pItem) { 
      // TODO Auto-generated method stub 
      Log.i("MODIFIER", "It finished!"); 

     } 
    }; 

    Log.i("FINALDURATIONVALUE", "Final duration: " + mFinalDuration); 
    // This is where you can chain up the colors 
    // TODO: Make this in to a function that interpolates the colors together 
    ColorModifier mColorModifier = new ColorModifier(5, Color.CYAN, 
      Color.RED, mIEntityModifierListener, EaseSineIn.getInstance()); 
    ColorModifier tColorModifier = new ColorModifier(5, Color.RED, 
      Color.CYAN, EaseSineInOut.getInstance()); 
    ColorModifier iColorModifier = new ColorModifier(5, Color.CYAN, 
      Color.GREEN, mIEntityModifierListener, EaseSineIn.getInstance()); 
    ColorModifier xColorModifier = new ColorModifier(5, Color.GREEN, 
      Color.YELLOW, EaseSineInOut.getInstance()); 
    ColorModifier yColorModifier = new ColorModifier(5, Color.YELLOW, 
      Color.CYAN, mIEntityModifierListener, EaseSineIn.getInstance()); 

    // The sequence modifier will go through the color modifiers 
    // and the loop entity modifier makes it continuous 
    SequenceEntityModifier mSequenceEntityModifier = new SequenceEntityModifier(
      mColorModifier, tColorModifier, iColorModifier, xColorModifier, 
      yColorModifier); 
    LoopEntityModifier mLoopEntityModifier = new LoopEntityModifier(
      mSequenceEntityModifier); 

    mRectangle.registerEntityModifier(mLoopEntityModifier); 

    scene.attachChild(mRectangle); 

    pOnPopulateSceneCallback.onPopulateSceneFinished(); 

} 
+0

Можете ли вы уточнить, что вы просите немного? Вы отмечаете, что ваша цель - «изменить свойства mRectangles, такие как продолжительность», но Rectangle не имеет свойства длительности. Если вы имеете в виду изменение продолжительности модификатора, почему бы просто не пройти в жестко закодированном значении? (т. е. у конструкторов для ваших кодовых указателей все имеют жестко запрограммированные 5-секундные длительности). –

+0

Да, это жестко запрограммировано вначале, но я разрешаю пользователю изменять свойства цвета и продолжительности в активности предпочтений. Вот почему я использую метод интерфейса модификатора. Итак, я могу проверять свойства, когда он работает в потоке. Я ценю ваши отзывы. – wavyGravy

+0

Так в чем ваш вопрос? Как заменить номер 5 на переменную? –

ответ

1

Существует два способа сделать это. Либо вы можете играть с переопределением встроенных методов в модификаторах (т. Е. Вы можете @override onUpdate()) и выполнять свою собственную логику там, или вы можете сделать это проще: разделите существующие модификаторы и стек на новый из них.

Вы упомянули в комментариях: «Я попробовал очистить и добавить другой модификатор цвета, но это не сработало», но не уточнил, почему. Если вы имеете в виду, что получили некоторую ошибку, опубликуйте сообщение об ошибке, и мы сможем обсудить его. Если вы имеете в виду, что вы не получаете «плавный» переход от существующего цвета к новому цвету (что будет иметь смысл), то вам следует сделать, чтобы новый модификатор начинался с текущих существующих значений. Другими словами, при создании цветового модификатора вы кормите его цветом «От» и «Кому», используйте mRectangle.getColor() как «От», чтобы вы могли начать переход с того места, где вы сейчас находитесь.

+0

А, я перепишу все, используя другие методы, и брошу туда логику. Я думаю, что я попытаюсь проверить, будет ли onManagedUpdate() для mRectangle работать. Я попытался использовать очистку модификатора, и он работал только один раз, потому что я использовал другой вложенный модификатор-слушатель, чтобы запустить его снова. Я думаю, что моя логика была ошибочной в этом вопросе. Я ценю ваши отзывы. Благодарю тебя. Я отчитаю. – wavyGravy

+0

@wavyGravy Прохладный. Дайте нам знать, как это работает. Кроме того, пожалуйста, подумайте о том, чтобы дать зеленый флажок для подтверждения, если этот ответ вам помог. –

+0

Я получил его для правильного обновления. Оказывается, мне не нужно было использовать этот метод с четвертым неизвестным аргументом. Мне просто нужно было очистить его и запустить новый стек модификаторов Entity в onModifierStarted(). Должно быть, я был на трещине, когда тестировал. Спасибо! – wavyGravy

Смежные вопросы