예제 #1
0
  private CGAffineTransform nodeToParentTransform() {
    if (isTransformDirty_) {
      transform_.setToIdentity();

      if (!isRelativeAnchorPoint_ && !CGPoint.equalToPoint(anchorPointInPixels_, zero)) {
        transform_.translate(anchorPointInPixels_.x, anchorPointInPixels_.y);
      }

      if (!CGPoint.equalToPoint(position_, zero)) transform_.translate(position_.x, position_.y);

      if (rotation_ != 0) transform_.rotate(-ccMacros.CC_DEGREES_TO_RADIANS(rotation_));

      if (skewX_ != 0 || skewY_ != 0) {
        /** create a skewed coordinate system and apply the skew to the transform */
        transform_ =
            transform_.getTransformConcat(
                CGAffineTransform.make(
                    1.0f,
                    MathLib.tan(ccMacros.CC_DEGREES_TO_RADIANS(skewY_)),
                    MathLib.tan(ccMacros.CC_DEGREES_TO_RADIANS(skewX_)),
                    1.0f,
                    0.0f,
                    0.0f));
      }

      if (!(scaleX_ == 1 && scaleY_ == 1)) transform_.scale(scaleX_, scaleY_);

      if (!CGPoint.equalToPoint(anchorPointInPixels_, zero))
        transform_.translate(-anchorPointInPixels_.x, -anchorPointInPixels_.y);

      isTransformDirty_ = false;
    }

    return transform_;
  }