コード例 #1
0
        public virtual new CCActionInterval reverse()
        {
            CCPointArray cCPointArray        = this.m_pPoints.copy();
            CCPoint      controlPointAtIndex = cCPointArray.getControlPointAtIndex(0);

            for (int i = 1; i < cCPointArray.count(); i++)
            {
                CCPoint cCPoint = cCPointArray.getControlPointAtIndex(i);
                cCPointArray.replaceControlPoint(cCPoint.Sub(controlPointAtIndex), i);
                controlPointAtIndex = cCPoint;
            }
            CCPointArray cCPointArray1 = cCPointArray.reverse();

            controlPointAtIndex = cCPointArray1.getControlPointAtIndex(cCPointArray1.count() - 1);
            cCPointArray1.removeControlPointAtIndex(cCPointArray1.count() - 1);
            controlPointAtIndex = controlPointAtIndex.Neg();
            cCPointArray1.insertControlPoint(controlPointAtIndex, 0);
            for (int j = 1; j < cCPointArray1.count(); j++)
            {
                CCPoint controlPointAtIndex1 = cCPointArray1.getControlPointAtIndex(j);
                CCPoint cCPoint1             = controlPointAtIndex1.Neg().Add(controlPointAtIndex);
                cCPointArray1.replaceControlPoint(cCPoint1, j);
                controlPointAtIndex = cCPoint1;
            }
            return(CCCardinalSplineBy.create(this.m_fDuration, cCPointArray1, this.m_fTension));
        }
コード例 #2
0
        /** Rotates a point counter clockwise by the angle around a pivot
         * @param v is the point to rotate
         * @param pivot is the pivot, naturally
         * @param angle is the angle of rotation cw in radians
         * @returns the rotated point
         * @since v0.99.1
         */
        public static CCPoint RotateByAngle(CCPoint v, CCPoint pivot, float angle)
        {
            CCPoint r = v.Sub(pivot);
            float   cosa = (float)Math.Cos(angle), sina = (float)Math.Sin(angle);
            float   t = r.x;

            r.x = t * cosa - r.y * sina + pivot.x;
            r.y = t * sina + r.y * cosa + pivot.y;
            return(r);
        }
コード例 #3
0
ファイル: CCPoint.cs プロジェクト: chengcong/cocos2d-xna
        public static CCPoint RotateByAngle(CCPoint v, CCPoint pivot, float angle)
        {
            CCPoint cCPoint = v.Sub(pivot);
            float   single  = (float)Math.Cos((double)angle);
            float   single1 = (float)Math.Sin((double)angle);
            float   single2 = cCPoint.x;

            cCPoint.x = single2 * single - cCPoint.y * single1 + pivot.x;
            cCPoint.y = single2 * single1 + cCPoint.y * single + pivot.y;
            return(cCPoint);
        }
コード例 #4
0
        public virtual CCActionInterval reverse()
        {
            CCPointArray copyConfig = (CCPointArray)m_pPoints.copy();

            //
            // convert "absolutes" to "diffs"
            //
            CCPoint p = copyConfig.getControlPointAtIndex(0);

            for (int i = 1; i < copyConfig.count(); ++i)
            {
                CCPoint current = copyConfig.getControlPointAtIndex(i);
                CCPoint diff    = current.Sub(p);
                copyConfig.replaceControlPoint(diff, i);

                p = current;
            }


            // convert to "diffs" to "reverse absolute"

            CCPointArray pReverse = copyConfig.reverse();

            // 1st element (which should be 0,0) should be here too

            p = pReverse.getControlPointAtIndex(pReverse.count() - 1);
            pReverse.removeControlPointAtIndex(pReverse.count() - 1);

            p = p.Neg();
            pReverse.insertControlPoint(p, 0);

            for (int i = 1; i < pReverse.count(); ++i)
            {
                CCPoint current = pReverse.getControlPointAtIndex(i);
                current = current.Neg();
                CCPoint abs = current.Add(p);
                pReverse.replaceControlPoint(abs, i);

                p = abs;
            }

            return(CCCardinalSplineBy.create(m_fDuration, pReverse, m_fTension));
        }
コード例 #5
0
 public static float Distance(CCPoint v1, CCPoint v2)
 {
     return(Length(v1.Sub(v2)));
 }
コード例 #6
0
 /** Rotates a point counter clockwise by the angle around a pivot
  @param v is the point to rotate
  @param pivot is the pivot, naturally
  @param angle is the angle of rotation cw in radians
  @returns the rotated point
  @since v0.99.1
  */
 public static CCPoint RotateByAngle(CCPoint v, CCPoint pivot, float angle)
 {
     CCPoint r = v.Sub(pivot);
     float cosa = (float)Math.Cos(angle), sina = (float)Math.Sin(angle);
     float t = r.x;
     r.x = t * cosa - r.y * sina + pivot.x;
     r.y = t * sina + r.y * cosa + pivot.y;
     return r;
 }
コード例 #7
0
 public static float Distance(CCPoint v1, CCPoint v2)
 {
     return Length(v1.Sub(v2));
 }