private void applyTransform() {
    transform.apply();

    if (transform.getRed() != null) color[0] = transform.getCurrent_red();
    if (transform.getGreen() != null) color[1] = transform.getCurrent_green();
    if (transform.getBlue() != null) color[2] = transform.getCurrent_blue();
    if (transform.getAlpha() != null) color[3] = transform.getCurrent_alpha();
  }
  public void transform(QuickTiGame2dTransform _transform) {
    try {
      transform = _transform;

      // save initial state
      transform.setStart_red(color[0]);
      transform.setStart_green(color[1]);
      transform.setStart_blue(color[2]);
      transform.setStart_alpha(color[3]);

      transform.start();

    } catch (Exception e) {
      Log.e(Quicktigame2dModule.LOG_TAG, "Error at scene.transform", e);
    }
  }
  private void completeTransform() {

    transform.setCompleted(true);

    view.onCompleteTransform(transform);
  }
  private void onTransform() {
    if (transform == null) return;
    if (transform.isCompleted()) return;

    // waiting for delay
    if (!transform.hasStarted()) return;

    // fire onStartTransform event
    if (!transform.isStartEventFired()) {
      transform.setStartEventFired(true);
      view.onStartTransform(transform);
    }

    if (transform.hasExpired()) {
      // if transform has been completed, finish the transformation
      if (transform.getRepeatCount() >= transform.getRepeat()) {
        if (transform.isAutoreverse() && !transform.isReversing()) {
          // no nothing
        } else {
          applyTransform();
          completeTransform();
          return;
        }
      }

      if (transform.isAutoreverse()) {
        transform.reverse();
      } else {
        transform.restart();
      }
    }

    applyTransform();
  }