1. 라스트 정리 
  어떻게 하다보니 org.cocos2d.actions.ease 관련 클래스를 모두 정리하였습니다.
막상정리하고 보니 별것도 없고 그냥 그렇네요 그런데 어떤 EaseAction을 쓸것인가
에 대한 고민을 안할수가 없네요 . 어떻게 해야 할까요? 하나하나 정리 테스트 해보면
좋겟지만. 먼가 감도 안오고 흠... 그래서 준비 했습니다.

휘어지는 정도가 한눈에 보이네요 ㅎㅎㅎ 그럼 
잘 골라서 쓰세요 ㅎㅎ





2.EaseAction 강의 바로가기(해당 클래스를 클릭하면 정리 강좌로 바로갑니다.)

CCEaseBackIn.java (2011/9/15 추가)

CCEaseBackInOut.java (2011/9/15 추가)

CCEaseBackOut.java (2011/9/15 추가)
 

CCEaseBounce.java (2011/9/15 추가)
* CCEaseBounceIn / CCEaseBounceInOut / CCEaseBounceOut  포함


CCEaseElastic.java (2011/9/15 추가)
CCEaseElasticIn /  CCEaseElasticInOut / CCEaseElasticOut 포함


CCEaseExponentialIn.java (2011/9/15 추가)

CCEaseExponentialInOut.java (2011/9/15)

CCEaseExponentialOut.java (2011/9/15)


CCEaseRateAction.java (2011/9/15)
CCEaseIn / CCEaseInOut / CCEaseOut  포함


CCEaseSineIn.java (2011/9/15)

CCEaseSineInOut.java (2011/9/15)

CCEaseSineOut.java (2011/9/15)


==> 위를 6개묶음으로 분류한것은 내부액션의 기간 수정 방법에 대한것입니다. 
     (결과값을 만들어내는 수식의 종류에 따라)




Posted by 수다쟁이증후군 :
1.클래스 설명
 
==> sin 함수,cos함수를 시뮬레이션화 한 클래스들 입니다.  
==> 네이밍만 이 싸인함수라고했지만. 
     실제로는 CCEaseSineIn /CCEaseSineInOut  이 2개는 코사인 함수를 이용합니다. 

==> 단지 MoveAction 만을 위한 클래스는 아니며 CCNode 속성에 있는 모든 값을 
     대상으로 합니다.  
==> (참고 : 
EaseAction 이란 ?


2. 클래스 관계도




3.추가된 멤버 변수 / 함수
==>추가된 멤버 변수는 없습니다. 
==> 없습니다. 라고 단호하게 말할까 했지만. 클래스 멤버 변수가 없다는것뿐이지
      EaseAction의 핵심 함수 update(오버라이드됨)에 있습니다.
      이는 EaseAction의 특성을 구별지을수 있는 핵심 부분이기에 각 클래스별 
      오버라이딩된 update(float t)를 살펴보겟습니다.
==> EaseAction의 동일한 반복입니다. 

CCEaseSineIn

@Override

    public void update(float t) {

        other.update(-1 * (float)Math.cos(t * (float) Math.PI / 2) + 1);

    }

 

CCEaseSineInOut

@Override

    public void update(float t) {

        other.update(-0.5f * ((float)Math.cos(Math.PI * t) - 1));

    }

 

CCEaseSineOut

    @Override

    public void update(float t) {

        other.update((float)Math.sin(t * (float) Math.PI / 2));

    }



==> 클래스 관계도의 특성표는 위에 오버라이딩된 함수공식에 따른것입니다. 

==> 바로 여기에서 알수 있듯이 CCEaseAction을 상속해서 여기처럼 update() 부분을
    오버라이딩해서 쓴다면 사용자별 
CCEaseRateAction을 만들수 있을것 입니다. 
    (솔직히 저거 쓸수 있는 사람은 별로 안되겟죠^^) 

   


4-4.사용법및 적용가능한곳.

public static CCEaseSineIn action(CCIntervalAction action) {

        return new CCEaseSineIn(action);

    }


    protected CCEaseSineIn(CCIntervalAction action) {

        super(action);

    }

--------------------------------------------------------------------------------- 


public static CCEaseSineInOut action(CCIntervalAction action) {

        return new CCEaseSineInOut(action);

    }


    protected CCEaseSineInOut(CCIntervalAction action) {

        super(action);

    }

--------------------------------------------------------------------------------- 


    public static CCEaseSineOut action(CCIntervalAction action) {

        return new CCEaseSineOut(action);

    }


    protected CCEaseSineOut(CCIntervalAction action) {

        super(action);

    }


==>파라미터 값으로 inner Action 에 대입할 action을 넣습니다 
==> CCNode의 속성을 변경시키는 액션은 어떤것이든지 적용이 가능합니다. 그리고
   일대일 대응이기때문에  CCSequence 또는 CCSpawn 액션또한  자신이 원했던 결과물을 
   얻을수 있을겁니다.
Posted by 수다쟁이증후군 :
1.클래스 설명

Base class for Easing actions with rate parameters 

==> rate 파라미터롤 가속도를 나타냅니다. (시간변위당 속도변위)
==> 가속도 효과를 나타내기 위해서 내부 액션의 가속도를 변경
      변경시키기 위한 추상화 클래스가 아닙니다. 기존에는 추상화 해놓고이거는 왜 
    추상화 안해 놓았는지 .... cocos2d가 아직 완성이 안되었다는걸가요? 흠... 
    조금더 고민을 해보아야 할듯합니다. 

==> 단지 MoveAction 만을 위한 클래스는 아니며 CCNode 속성에 있는 모든 값을 
     대상으로 합니다.  
==> (참고 : 
EaseAction 이란 ?


2. 클래스 관계도




3.추가된 멤버 변수 / 함수
==>추가된 멤버 변수는 이고  

/** rate value for the actions */
float rate;


==> 추가된 멤버 함수(추상화 함수 가 아닌 단지 오버라이드 함수 입니다.)
==> 멤버변수가 늘어난것이니만큼 기존의 copy()와 reverse()를  새롭게 정의하는것은 
     당연합니다. 

 @Override

    public CCEaseRateAction copy() {

        return new CCEaseRateAction(other.copy(), rate);

    }


    @Override

    public CCIntervalAction reverse() {

        return new CCEaseRateAction(other.reverse(), 1 / rate);

    }






4.CCEaseRateAction를 상속하는 클래스들

CCEaseIn.java

CCEaseInOut.java

CCEaseOut.java


==> 기존의 네이밍 규칙과 좀 다르네요 머 제가 한게 아니니까 일단 그려려니 할께요^^;;
==> 위의 클래스 설명을 따로 뺄까생각해보았지만. 
 
    좀 비효울적인듯 하여 아래에 추가로 올립니다. 






4-1 CCEaseIn/ CCEaseInOut  / CCEaseOut 클래스 설명 
 
==>기존의 CCRateAction을 상속하여 지수함수를 시뮬레이션 합니다.
==>CCEaseExponential~~ 류의 클래스와 거의 비슷하게 나오지만 조금 다르네요 쪼끔...
    개인적인 생각으로 굳이 이럴필요 있나 싶을정도로 말이죠. 





4-2. 클래스 관계도


==> 진짜 보면 볼수록 너무 유사하군요. 왜 이런류의 클래스를 만들어서 사람 귀찮게시리 . 쯧..





4-3. 추가된 멤버변수/함수
==> 없습니다. 라고 단호하게 말할까 했지만. 클래스 멤버 변수가 없다는것뿐이지
      EaseAction의 핵심 함수 update(오버라이드됨)에 있습니다.
      이는 EaseAction의 특성을 구별지을수 있는 핵심 부분이기에 각 클래스별 
      오버라이딩된 update(float t)를 살펴보겟습니다.
==> EaseAction의 동일한 반복입니다. 

CCEaseIn

 @Override

    public void update(float t) {

        other.update((float) Math.pow(t, rate));

    }

 

CCEaseInOut

   @Override

    public void update(float t) {

        int sign = 1;

        int r = (int) rate;

        if (r % 2 == 0)

            sign = -1;


        t *= 2;

        if (t < 1)

            other.update(0.5f * (float) Math.pow(t, rate));

        else

            other.update(sign * 0.5f * ((float) Math.pow(t - 2, rate) + sign * 2));

    }

 

CCEaseOut

   @Override

    public void update(float t) {

        other.update((float) Math.pow(t, 1 / rate));

    }



==> 클래스 관계도의 특성표는 위에 오버라이딩된 함수와 float rate변수 의 공식에 
    따른것입니다. 

==> 바로 여기에서 알수 있듯이 CCEaseRateAction을 상속해서 여기처럼 update() 부분을
    오버라이딩해서 쓴다면 사용자별 
CCEaseRateAction을 만들수 있을것 입니다. 
    (솔직히 저거 쓸수 있는 사람은 별로 안되겟죠^^) 

   


4-4.사용법및 적용가능한곳.

public static CCEaseIn action(CCIntervalAction action, float rate) {

        return new CCEaseIn(action, rate);

    }


    protected CCEaseIn(CCIntervalAction action, float rate) {

        super(action, rate);

    }
--------------------------------------------------------------------------------- 


   public static CCEaseInOut action(CCIntervalAction action, float rate) {

        return new CCEaseInOut(action, rate);

    }


    protected CCEaseInOut(CCIntervalAction action, float rate) {

        super(action, rate);

    }
--------------------------------------------------------------------------------- 


   public static CCEaseOut action(CCIntervalAction action, float rate) {

        return new CCEaseOut(action, rate);

    }


    protected CCEaseOut(CCIntervalAction action, float rate) {

        super(action, rate);

    }


==> 보시다 싶이 지금까지와는 달리 인자값을 2개를 모두 주어야 합니다.
    (inner action값과 rate 값 두개) 

==> CCNode의 속성을 변경시키는 액션은 어떤것이든지 적용이 가능합니다만. 
   일대일 대응이기때문에  CCSequence 또는 CCSpawn 액션또한  자신이 원했던 결과물을
   얻을수 있을겁니다.
Posted by 수다쟁이증후군 :
1.클래스 설명

어떤 변수는 한번 이상을 트리거하게 됩니다.(이 함수는 일대일대응이 아닙니다.) 
그래서 내부 액션은 이 변수값에 다시 영향을 받게 됩니다. CCMoveBy, CCScaleBy, CCRotateBy 같은 간단한 액션은 EaseBack 액션에 적용하는 것이 무방하지만 CCSequence 또는 CCSpawn 액션은 예기치 못한 결과를 얻을 수 있습니다.
<출처 :http://www.cocos2d-iphone.org/wiki/doku.php/ko:prog_guide:actions_ease

 
==>이전의 이런설명과 달리 이 클래스의 시간변수는 일대일 대응이 됩니다. 
   그러므로 CCSequence 와  CCSpawn Action을 사용해도 무방합니다. 
==> 지수함수를 시뮬레이션 해놓은 클래스 입니다.  


2. 클래스 관계도


==> 지수함수를 시뮬레이션 해놓은 클래스 입니다.  

3. 추가된 멤버변수/함수
==> EaseAction의 핵심 함수 update(오버라이드됨)에 중요한 수식이 있습니다. 
    이는 EaseAction의 특성을 구별지을수 있는 핵심 부분이기에 각 클래스별 
    오버라이딩된 update(float t)를 살펴보겟습니다.

   

CCEaseExponentialIn 
@Override

    public void update(float t) {

        other.update((t == 0) ? 0 : (float) Math.pow(2, 10 * (t / 1 - 1)) - 1 * 0.001f);

    }


CCEaseExponentialInOut 

 @Override

    public void update(float t) {

    t /= 0.5f;

        if (t < 1)

            t = 0.5f * (float) Math.pow(2, 10 * (t - 1));

        else

            t = 0.5f * (-(float) Math.pow(2, -10 * (t - 1) ) + 2);

        other.update(t);

    }


CCEaseExponentialOut 

 @Override

    public void update(float t) {

        other.update((t == 1) ? 1 : ((float) (-Math.pow(2, -10 * t / 1) + 1)));

    }


==>클래스 관계도의 특성표는 위에 오버라이딩된 함수의 공식에 따른것입니다. 
==> 바로 여기에서 알수 있듯이 EaseAction을 오버라이딩하고 여기처럼 update() 부분을
    오버라이딩해서 쓴다면 사용자별 EaseAction을 만들수 있을것 입니다. 
    (수학책을 방정식 공석을 찾아 한번 해보세요 ㅎㅎㅎ 나중에 저도 도전해볼려고 합니다)
==> 오버라이딩된 함수 내부를 상세하게 설명할까 고민했지만 이건 별의미 없는것 같아서 
    패스 합니다. 



4.사용법및 적용가능한곳.

 public static CCEaseExponentialIn action(CCIntervalAction action) {

        return new CCEaseExponentialIn(action);

    } 

 
public static CCEaseExponentialOut action(CCIntervalAction action) {

        return new CCEaseExponentialOut(action);

    }
 

public static CCEaseExponentialOut action(CCIntervalAction action) {

        return new CCEaseExponentialOut(action);

    } 

 


==> 이처럼 동일합니다. 
==> CCNode의 속성을 변경시키는 액션은 어떤것이든지 적용이 가능합니다만. 
    CCSequence 또는 CCSpawn 액션은 자신이 원했던 결과물을 얻을수 있습니다.
Posted by 수다쟁이증후군 :
1.클래스 설명

These actions alters the time simulating an elastic. Elastic actions will use time values greater than 1 and lower than 0, so the inner action should be prepared to handle this special values.

==> 이 액션은 고무밴드를 시뮬레이션(흉내내는) 액션입니다. Elastic action은 사용되는    시간변수는 1보다 크고 0보다 작습니다. 내부부액션(EaseAction이 멤버변수로 가지고 있는
    는 CCIntervalAction 레퍼런스변수) 이 특수한 변수를 다루기 위해서이다. 
 
==> 말 그대로 탄력성이 느껴지는 효과를 나타내기 위해서 내부 액션의 가속도를 변경
      변경시키기 위한 추상화 클래스입니다. 
==> 단지 MoveAction 만을 위한 클래스는 아니며 CCNode 속성에 있는 모든 값을 
     대상으로 합니다.  
==> (참고 : EaseAction 이란 ?


2. 클래스 관계도



3.추가된 멤버 변수 / 함수
==>추가된 멤버 변수는 이고  

/** period of the wave in radians. default is 0.3 */
protected float period_;


==> 추가된 멤버 함수(추상화 함수 )
==> 멤버변수가 늘어난것이니만큼 기존의 copy()와 reverse()를  새롭게 정의하는것은
     당연합니다. 

 @Override

    public abstract CCEaseAction copy();


    @Override

    public abstract CCIntervalAction reverse();






4.CCEaseBounce 를 상속하는 클래스들

CCEaseElasticIn.java

CCEaseElasticInOut.java

CCEaseElasticOut.java


==> 위의 클래스 설명을 따로 뺄까생각해보았지만. 
      좀 비효울적인듯 하여 아래에 추가로 올립니다. 




4-1 CCEaseElasticIn / CCEaseElasticInOut  / CCEaseElasticOut클래스 설명 

어떤 변수는 한번 이상을 트리거하게 됩니다.(이 함수는 일대일대응이 아닙니다.) 
그래서 내부 액션은 이 변수값에 다시 영향을 받게 됩니다. CCMoveBy, CCScaleBy, CCRotateBy 같은 간단한 액션은 EaseBack 액션에 적용하는 것이 무방하지만 CCSequence 또는 CCSpawn 액션은 예기치 못한 결과를 얻을 수 있습니다.
<출처 :http://www.cocos2d-iphone.org/wiki/doku.php/ko:prog_guide:actions_ease

 
==> 음... 설명이 조금 애한데요 
      원활한 설명을 위해서 클래스 관계도 를 먼저 보겟습니다




4-2. 클래스 관계도



==> 이제 클래스 설명을 다시 보겟습니다. 애매한 단어가 

     "어떤 변수는 한번 이상을 트리거하게 됩니다" 이라는 말인데 위에 그림에 보면 이해가 좀더 
     잘 될것입니다 (여기서 변수라함은 시간변수입니다. update() 에 들어가는 시간값입니다.)
==> 바로 위에 설명은 반복되고 있어 뺄까 고민했지만. 아직은 필요한듯 하여 그냥 두기로
     했습니다 
==> 솔직히 이게 왜 탄력적인 느낌이 나는지 이해가 잘 안됩니다. 그냥 이런가보다 아~~ 하는
    정도죠 ㅎㅎ 






4-3. 추가된 멤버변수/함수
==> 없습니다. 라고 단호라게 말할까 했지만. 클래스 멤버 변수가 없다는것뿐이지
      EaseAction의 핵심 함수 update(오버라이드됨)에 있습니다.
      이는 EaseAction의 특성을 구별지을수 있는 핵심 부분이기에 각 클래스별 
      오버라이딩된 update(float t)를 살펴보겟습니다.
==> EaseAction의 동일한 반복입니다. 

CCEaseElasticIn
@Override

    public void update(float t) {

        float newT = 0;

        if (t == 0 || t == 1) {

            newT = t;


        } else {

            float s = period_ / 4;

            t = t - 1;

            newT = (float) (-Math.pow(2, 10 * t) * Math.sin((t - s) * M_PI_X_2 / period_));

        }

        other.update(newT);

    }

 

CCEaseElasticInOut
public void update(float t) {

        float newT = 0;


        if (t == 0 || t == 1)

            newT = t;

        else {

            t = t * 2;

            if (period_ == 0)

                period_ = 0.3f * 1.5f;

            float s = period_ / 4;


            t = t - 1;

            if (t < 0) {

                newT = (float) (-0.5f * Math.pow(2, 10 * t) * Math.sin((t - s) * M_PI_X_2 / period_));

            } else {

                newT = (float) (Math.pow(2, -10 * t) * Math.sin((t - s) * M_PI_X_2 / period_) * 0.5f + 1);

            }

        }

        other.update(newT);

    }

 

CCEaseElasticOut
@Override

    public void update(float t) {

        float newT = 0;

        if (t == 0 || t == 1) {

            newT = t;

        } else {

            float s = period_ / 4;

            newT = (float) (Math.pow(2, -10 * t) * Math.sin((t - s) * M_PI_X_2  / period_) + 1);

        }

        other.update(newT);

    }



==> 클래스 관계도의 특성표는 위에 오버라이딩된 함수와 period_변수 의 공식에 
    따른것입니다. 

==> 바로 여기에서 알수 있듯이 CCEaseElastic 을 오버라이딩하고 여기처럼 update() 부분을
    오버라이딩해서 쓴다면 사용자별 CCEaseElastic 을 만들수 있을것 입니다. 
    (솔직히 저거 쓸수 있는 사람은 별로 안되겟죠^^) 

   


4-4.사용법및 적용가능한곳.

public static CCEaseElasticIn action(CCIntervalAction action) {

        return new CCEaseElasticIn(action, 0.3f);

    }


    public static CCEaseElasticIn action(CCIntervalAction action, float period) {

        return new CCEaseElasticIn(action, period);

    }


    protected CCEaseElasticIn(CCIntervalAction action, float period) {

        super(action, period);

    }


==> 보시다 싶이 지금까지와는 달리 period 값을 추가로 줄수 있습니다. 실다면 
    디폴트로 0.3이 할당 됩니다. 

==> CCNode의 속성을 변경시키는 액션은 어떤것이든지 적용이 가능합니다만. 
    CCSequence 또는 CCSpawn 액션은 자신이 원했던 결과물을 얻을수 없을지도 모릅니다. 


Posted by 수다쟁이증후군 :
1.클래스 설명

 
==> 말 그대로 공이 통통 튕기듯한 효과를 나타내기 위해서 내부 액션의 가속도를 변경
      변경시키기 위한 추상화 클래스입니다.
==> 단기 MoveAction 만을 위한 클래스는 아니며 CCNode 속성에 있는 모든 값을
     대상으로 합니다.  
==>(참고 : EaseAction 이란 ?


2. 클래스 관계도


==> CCAction 에서부터 많이 흘러 왔네요 어디까지 흘러갈지 저도 궁금합니다. ㅎㅎㅎ

3.추가된 멤버 변수 / 함수
==>추가된 멤버 변수는 없습니다. 
==>추가된 멤버 함수는 있습니다. 

protected float bounceTime(float t) {

        if (t < 1 / 2.75) {

            return 7.5625f * t * t;

        } else if (t < 2 / 2.75) {

            t -= 1.5f / 2.75f;

            return 7.5625f * t * t + 0.75f;

        } else if (t < 2.5 / 2.75) {

            t -= 2.25f / 2.75f;

            return 7.5625f * t * t + 0.9375f;

        }


        t -= 2.625f / 2.75f;

        return 7.5625f * t * t + 0.984375f;

    }


==> 바운스 효과를 나타내기 위한 수학공식인듯합니다. 
      7.5625 / 2.75 / 2.25 / 0.984375
==> 이거 확인해봏수 있으면 좋지만 수학은 젬뱅이라. ㄷㄷ 어디 참고할만 거 없나요?


4.CCEaseBounce 를 상속하는 클래스들

CCEaseBounceIn.java

CCEaseBounceInOut.java

CCEaseBounceOut.java


==> 위의 클래스 설명을 따로 뺄까생각해보았지만. 
      좀 비효울적인듯 하여 아래에 추가로 올립니다. 




4-1 CCEaseBounceIn /CCEaseBounceInOut / CCEaseBounceOut 클래스 설명 

어떤 변수는 한번 이상을 트리거하게 됩니다.(이 함수는 일대일대응이 아닙니다.) 
그래서 내부 액션은 이 변수값에 다시 영향을 받게 됩니다. CCMoveBy, CCScaleBy, CCRotateBy 같은 간단한 액션은 EaseBack 액션에 적용하는 것이 무방하지만 CCSequence 또는 CCSpawn 액션은 예기치 못한 결과를 얻을 수 있습니다.
<출처 :http://www.cocos2d-iphone.org/wiki/doku.php/ko:prog_guide:actions_ease

 
==> 음... 설명이 조금 애한데요 
      원활한 설명을 위해서 클래스 관계도 를 먼저 보겟습니다




4-2. 클래스 관계도


==> 이제 클래스 설명을 다시 보겟습니다. 애매한 단어가 
     "어떤 변수는 한번 이상을 트리거하게 됩니다" 이라는 말인데 위에 그림에 보면 이해가 좀더 
     잘 될것입니다 (여기서 변수라함은 시간변수입니다. update() 에 들어가는 시간값입니다.)
==> 바로 위에 설명은 반복되고 있어 뺄까 고민했지만. 아직은 필요한듯 하여 그냥 두기로
     했습니다 






4-3. 추가된 멤버변수/함수
==> 없습니다. 라고 단호라게 말할까 했지만. 클래스 멤버 변수가 없다는것뿐이지
      EaseAction의 핵심 함수 update(오버라이드됨)에 중요한 지역변수가 있습니다. 
      이는 EaseAction의 특성을 구별지을수 있는 핵심 부분이기에 각 클래스별 
      오버라이딩된 update(float t)를 살펴보겟습니다.
==> EaseAction의 동일한 반복입니다. 

CCEaseBounceIn
public void update(float t) {

        float newT = 1 - bounceTime(1 - t);

        other.update(newT);

    }


CCEaseBounceInOut
 @Override

    public void update(float t) {

        float newT = 0;

        if (t < 0.5) {

            t = t * 2;

            newT = (1 - bounceTime(1 - t)) * 0.5f;

        } else

            newT = bounceTime(t * 2 - 1) * 0.5f + 0.5f;


        other.update(newT);

    }


CCEaseBounceOut
@Override

    public void update(float t) {

        float newT = bounceTime(t);

        other.update(newT);

    }


==> 클래스 관계도의 특성표는 위에 오버라이딩된 함수와 bounceTime() 의 공식에
    따른것입니다. 

==> 바로 여기에서 알수 있듯이 EaseAction을 오버라이딩하고 여기처럼 update() 부분을
    오버라이딩해서 쓴다면 사용자별 EaseAction을 만들수 있을것 입니다. 
    (수학책을 방정식 공석을 찾아 한번 해보세요 ㅎㅎㅎ 나중에 저도 도전해볼려고 합니다)






4-4.사용법및 적용가능한곳.

public static CCEaseBounceIn action(CCIntervalAction action) {

        return new CCEaseBounceIn(action);

    }

 public static CCEaseBounceInOut action(CCIntervalAction action) {

        return new CCEaseBounceInOut(action);

    }

 public static CCEaseBounceOut action(CCIntervalAction action) {

        return new CCEaseBounceOut(action);

    }


==> 이처럼 동일합니다. 
==> CCNode의 속성을 변경시키는 액션은 어떤것이든지 적용이 가능합니다만. 
    CCSequence 또는 CCSpawn 액션은 자신이 원했던 결과물을 얻을수 없을지도 모릅니다. 






















 


Posted by 수다쟁이증후군 :
1.클래스 설명

어떤 변수는 한번 이상을 트리거하게 됩니다.(이 함수는 일대일대응이 아닙니다.)
그래서 내부 액션은 이 변수값에 다시 영향을 받게 됩니다. CCMoveBy, CCScaleBy, CCRotateBy 같은 간단한 액션은 EaseBack 액션에 적용하는 것이 무방하지만 CCSequence 또는 CCSpawn 액션은 예기치 못한 결과를 얻을 수 있습니다.
<출처 :http://www.cocos2d-iphone.org/wiki/doku.php/ko:prog_guide:actions_ease

 
==> 음... 설명이 조금 애한데요 
      원활한 설명을 위해서 클래스 관계도 를 먼저 보겟습니다

2. 클래스 관계도

==> 이제 클래스 설명을 다시 보겟습니다. 애매한 단어가 
     "어떤 변수는 한번 이상을 트리거하게 됩니다" 이라는 말인데 위에 그림에 보면 이해가 좀더 
     잘 될것입니다 (여기서 변수라함은 시간변수입니다. update() 에 들어가는 시간값입니다.)

3. 추가된 멤버변수/함수
==> 없습니다. 라고 단호라게 말할까 했지만. 클래스 멤버 변수가 없다는것뿐이지
      EaseAction의 핵심 함수 update(오버라이드됨)에 중요한 지역변수가 있습니다. 
      이는 EaseAction의 특성을 구별지을수 있는 핵심 부분이기에 각 클래스별 
      오버라이딩된 update(float t)를 살펴보겟습니다.
   

CCEaseBackIn 클래스
 @Override

    public void update(float t) {

        float overshoot = 1.70158f;

        other.update(t * t * ((overshoot + 1) * t - overshoot));

    }


CCEaseBackInOut 
@Override

    public void update(float t) {

        float overshoot = 1.70158f * 1.525f;


        t = t * 2;

        if (t < 1) {

            other.update((t * t * ((overshoot + 1) * t - overshoot)) / 2);

        } else {

            t = t - 2;

            other.update((t * t * ((overshoot + 1) * t + overshoot)) / 2 + 1);

        }

    }


CCEaseBackOut 
@Override

    public void update(float t) {

        float overshoot = 1.70158f;


        t = t - 1;

        other.update(t * t * ((overshoot + 1) * t + overshoot) + 1);

    }


==>클래스 관계도의 특성표는 위에 오버라이딩된 함수의 공식에 따른것입니다. 
==> 바로 여기에서 알수 있듯이 EaseAction을 오버라이딩하고 여기처럼 update() 부분을
    오버라이딩해서 쓴다면 사용자별 EaseAction을 만들수 있을것 입니다. 
    (수학책을 방정식 공석을 찾아 한번 해보세요 ㅎㅎㅎ 나중에 저도 도전해볼려고 합니다)
==> 오버라이딩된 함수 내부를 상세하게 설명할까 고민했지만 이건 별의미 없는것 같아서 
    패스 합니다. 


4.사용법및 적용가능한곳.

public static CCEaseBackIn action(CCIntervalAction action) {

        return new CCEaseBackIn(action);

    }

 public static CCEaseBackInOut action(CCIntervalAction action) {

        return new CCEaseBackInOut(action);

    }

 public static CCEaseBackOut action(CCIntervalAction action) {

        return new CCEaseBackOut(action);

    }


==> 이처럼 동일합니다. 
==> CCNode의 속성을 변경시키는 액션은 어떤것이든지 적용이 가능합니다만. 
    CCSequence 또는 CCSpawn 액션은 자신이 원했던 결과물을 얻을수 없을지도 모릅니다. 








Posted by 수다쟁이증후군 :

1. 클래스 설명

Base class for Easing actions


==> 액션을 쉽게 하게위한 기본 클래스 입니다. 
==> 말그대로 쉬운 액션 입니다. 액션을 보다 쉽고 재밌게 쓰기 위한 기본클래스입니다. 

==> 이렇게 클래스 소스에서 뽑아 낼수 있는 자료는 별로 없네요 그래서 홈페이지 있는
    자료를 참고 해봅니다.     

Ease 액션은 내부의 액션의 기간을 수정하는 특별한 composition액션입니다. 

Flash에서는 이러한 액션을 Tweening 또는 Easing 액션이라고 합니다.


이 액션을 내부 액션의 속도를 수정하지만 전체 동작 시간을 수정하지는 않습니다. 

내부 액션이 5초 동안 수행된다면 전체 시간은 5초 동안 진행될겁니다.


Ease 액션은 동작 시간을 선형적으로 수정합니다.
 




예를 들면 내부 액션을 가속화하거나 저속화합니다.


이 액션을 3가지 타입으로 구분할 수 있습니다. :


In actions: 액션의 처음부분을 가속화

Out actions: 액션의 끝 부분을 가속화

InOut actions: 처음/끝과 끝에서 가속화

easing 또는 tweening 액션은 다음 페이지를 참조하세요. :


http://hosted.zeh.com.br/tweener/docs/en-us/misc/transitions.html

http://www.robertpenner.com/easing/easing_demo.html 

위에 2페이지를 찾아 보시면 정말 깔끔하게 잘 정리 되어있습니다.  

 



2. 추가된 멤버 변수 

public static final float M_PI_X_2 = (float) (Math.PI * 2.0f);
protected CCIntervalAction other;


==>첫번째 멤버변수 M_PI_X_2  가 있는 것을 보니 액션을 사용할때 수학적인 요소를 사용하려
    나 봅니다.
==>두번째 멤버변수  
other  CCIntervalAction을 멤버변수로 하나더 가지고 있습니다. 이걸 왜 
    가지고 있을까요? 위에서 설명한바와 같이 액션의 기간을 수정하기위함입니다. (기간 수정
    이란 말은 액션의 속도를 바꾼다는 말입니다.)
   
3. 클래스 상속 관계도


(출처 :http://www.cocos2d-iphone.org/api-ref/0.99.0/interface_c_c_ease_action.html)
 
==>중간 중간 헷갈리수도 있으니 일단 참고하세요 

4. CCEaseAction을 상속하는 클래스들 (업데이트되는 분석글을 보려면 초록색글자 클릭)

CCEaseBackIn.java (2011/9/15 추가)

CCEaseBackInOut.java (2011/9/15 추가)

CCEaseBackOut.java (2011/9/15 추가)
 

CCEaseBounce.java (2011/9/15 추가)
* CCEaseBounceIn / CCEaseBounceInOut / CCEaseBounceOut  포함


CCEaseElastic.java (2011/9/15 추가)
CCEaseElasticIn /  CCEaseElasticInOutCCEaseElasticOut 포함


CCEaseExponentialIn.java (2011/9/15 추가)

CCEaseExponentialInOut.java (2011/9/15)

CCEaseExponentialOut.java (2011/9/15)


CCEaseRateAction.java (2011/9/15)
CCEaseInCCEaseInOut / CCEaseOut  포함


CCEaseSineIn.java (2011/9/15)

CCEaseSineInOut.java (2011/9/15)

CCEaseSineOut.java (2011/9/15)


==> 위를 6개묶음으로 분류한것은 내부액션의 기간 수정 방법에 대한것입니다. 
     (결과값을 만들어내는 수식의 종류에 따라)


5. 쓰이는 곳 

==> 실제적으로 코드에서 사용할일은 없을듯합니다. CCEaseAction 클래스를 기반으로 
      확장된 클래스(4번참고)를 사용하세요 
==> cocos2d는 아직 확장중인 엔진으므로 혹시 사용자가 나만의 EaseAction을 구현할때나 
     쓰일 것 입니다.

                 





Posted by 수다쟁이증후군 :

CCCameraAction 이 CCIntervalAction을 상속했다지만 다이렉트로 이 클래스를 사용할일은
현재까지는 별로 없을듯합니다.   하는 일이라고는 거의 초기화 관련 변수들을 초기화 해준는것말고는 없습니다.   

<출처 :http://www.cocos2d-iphone.org/api-ref/0.99.0/interface_c_c_orbit_camera.html>

위에 그림에서 보다 시피  실질적으로 쓰이는 부분은 CCOrbitCamera 입니다. 
즉  카메라 관련 Action을 하려면 CCOrbitCamera 을 쓰세요 

그럼 본격적으로 CCOrbitCamera 을 알아보고자 합니다.
일단 클래스 설명부터 

/** CCOrbitCamera action

 * Orbits the camera around the center of the screen using spherical coordinates

 */


구면자표계를 사용하여 화면가운데를 이동하는 카메라의 궤도이다? 정확안 해석은 아닌데
의미는 대충 알것네요.
(구면좌표계란 ? 
중심에서의 거리, 방위각, 위도를 이용하여 3차원 위치를 표시하는 방법. 구면에서 나타나는 현상이 나 구면 형태로 전파되는 현상을 기술하기에 편리함.(출처 네이버 지식사전))

멤버변수로 
    float radius; 거리 
    float deltaRadius; 목표 거리
    float angleZ; 방위각
    float deltaAngleZ; 목표방위각
    float deltaAngleX;  목표위도
    float angleX; 위도 
있습니다. 다른멤버 변수가 있기는 하지만. 이는 위에서 설정한 값을 
라디언값으로 바꾸어 부분이므로 우리가 참고 할 필요는 없습니다.
생성자는  아래와 같습니다. 

 protected CCOrbitCamera(float t, float r, float dr, float z, float dz, float x, float dx)


t 는 Action의 시간을 나타내고 
차례대로 위의 멤버변수와 맵핑됩니다.
이 멤버변수에 따라 결과 값이 상당히 달라지므로 충분한 테스트를 해보는것을 추천합니다. 
대충 이렇게 값을 넣으면 이렇게 나오겟지 하고 대충 넣으면 원치않던 결과값이 나올수 있습니다. 


관련 테스트 예제는
ActionsTest.java
CocosNodeTest.java 
EffectsAdvancedTest.java
SpritesTest.java 
에 포함되어있습니다.  참고해보세요 






 
 
Posted by 수다쟁이증후군 :

CCIntervelAction을 직접 상속하는 클래스는 
4개의 패키지로 나누어져 있습니다. 
해당 클래스를 클릭 하면 상세한 설명을 보실수 있습니다. (분석글이 있는것은 파란색입니다)

org.cocos2d.actions.camera

    CCCameraAction.java(2011/9/14 추가분)

org.cocos2d.actions.ease

    CCEaseAction.java(2011/9/14 추가분)

org.cocos2d.actions.grid

    CCAccelAmplitude.java

    CCAccelDeccelAmplitude.java

    CCDeccelAmplitude.java

    CCGridAction.java

org.cocos2d.actions.interval

    CCAnimate.java

    CCBezierBy.java

    CCBlink.java

    CCDelayTime.java

    CCFadeIn.java

    CCFadeOut.java

    CCFadeTo.java

    CCJumpBy.java

    CCMoveTo.java

    CCProgressFromTo.java

    CCProgressTo.java

    CCPropertyAction.java

    CCRepeat.java

    CCReverseTime.java

    CCRotateBy.java

    CCRotateTo.java

    CCScaleTo.java

    CCSequence.java

    CCSkewTo.java

    CCSpawn.java

    CCTintBy.java

    CCTintTo.java

 
Posted by 수다쟁이증후군 :
Intervel 이라 함은 간격을 나타냅니다.

/** An interval action is an action that takes place within a certain period of time.

It has an start time, and a finish time. The finish time is the parameter

duration plus the start time.


These CCIntervalAction actions have some interesting properties, like:

 - They can run normally (default)

 - They can run reversed with the reverse method

 - They can run with the time altered with the Accelerate, AccelDeccel and Speed actions.


For example, you can simulate a Ping Pong effect running the action normally and

then running it again in Reverse mode.



Interval Action은 일정기간동안에 실행되는 Action 이다. 음... 이건만 가지고는 너무 뜬구름 잡는소리라서 멤버 변수와 멤버함수를 확인해보았습니다. 

멤버 변수로는
protected float elapsed;
private boolean firstTick;
을 가지고있더군요 

elapsed는 경과된,., 이니까 경과된시간. ...아~~~
CCFinteTimeAction 에 일정 시간이 있으니까 
그 일정 시간과 비교할 다른 참고 변수를 가진다는거죠 
그리고 멤버 함수를 보니 아니나 다를까 . 

CCFinteTimeAction에서 선언한. duration과 
CCIntervelAction 에서 선언한 elapsed을 비교하는 구문이 있었습니다. 
바로 요놈 입니다. 

public boolean isDone() {

        return (elapsed >= duration);

    }


참이면 stop가 호출 되겟고 아니면 step이 호출되겟죠ㅎ


  여기서 한가지 의문점은 이럴꺼면 왜 궅이 CCFinteTimeAction 가 CCIntervelAction 을 분리시켰냐에 대한 의문이 들더군요, 단지 변수 하나 추가하고 함수 오버라이딩 할꺼면 한번에 다하면 되지 왜 궅이 이렇게  귀찮게 해야 하나 라는거죠 
  이렇게 클래스 분리함으로써 얻을수 있는 장점은 무엇일까요? 이를 설명하기 위해서는CCFinteTimeAction 을 상속한 또 다른 클래스  CCInstantAction을 알면 해결될수 있을것이라 생각합니다. 

그럼 CCInstantAction 을 살펴보면

/** Instant actions are immediate actions. They don't have a duration like

the CCIntervalAction actions.

*/

즉시 실행되는 액션이고 CCIntervalAction처럼 duration을 가지지 않는다. 

추가된 멤버변수도 없습니다. 
오히려 생성자에서 

protected CCInstantAction() {

        super(0);

    } 

@Override

    public boolean isDone() {

        return true;

    }


    @Override

    public void step(float dt) {

        update(1.0f);

    }


    @Override

    public void update(float t) {

        // ignore

    }


자신의 부모클래스의 멤버변수인 duration의 값을 0로 줘버리더군요 이말은  실행하는 즉시 결과가 화면에 도출된다는것을 의미합니다. 함수 오버라이딩 해놓은걸보면. 
step 이  바로 1로써 업데이트 되어 버립니다.

음.  이렇게 살펴 보았지만 위의 의문점은 해결이 안되는군요 .
이럴꺼 전부  CCFinteTimeAction 과 CCIntervelAction 과 CCInstantAction 을 하나의 클래스로 만들어서 멤버 변수의 값만 바꿔주면 되지 않나? 라는 생각이 들더군요 . 

의문점을 해결하고자 했는데 오히여 더 복잡해지네요 . . ㄷㄷㄷ
이에 대해서 좀더 알아보고자 한다면. 다른 클래스들을 살펴보아야겟네요.  파고 들어갈수록 점점 이상해지네요 . ㅋㅋㅋ 일단 의문점은 남겨두고 갈께요. Action에 대해서 어느 정도 정리가 되면 이 의문점에 대해서 생각해보겟습니다.





혹시 까먹을지도 모르니 아래와 같이 체크해놓고 ㅎㅎ

Q.이럴꺼 전부  CCFinteTimeAction 과 CCIntervelAction 과 CCInstantAction 을 하나의 클래스로 만들어서 멤버 변수의 값만 바꿔주면 되지 않나? 





Posted by 수다쟁이증후군 :
CCAction 클래스 자체는 별의미 없어보입니다. 

멤버 변수가
public CCNode target;
private CCNode originalTarget
private int tag;

이렇게 3개밖에 없네요

타겟노드 와  구분자 tag

그럼 멤버 변수가 머 볼거 없으니 멤버 함수를 확인해 보니. 
Action이 한프레임동안 하는 일들을 알수 있었습니다. 
바로 아래와 같은데요. 

//! called before the action start. It will also set the target.
    public void start(CCNode aTarget) {
        originalTarget = target = aTarget;
    }

    //! called after the action has finished. It will set the 'target' to nil.
    //! IMPORTANT: You should never call "[action stop]" manually. Instead, use: "[target stopAction:action];"
    public void stop() {
        // target = null;
    }

    //! return YES if the action has finished
    public boolean isDone() {
        return true;
    }

    //! called every frame with it's delta time. DON'T override unless you know what you are doing.
    public abstract void step(float dt);

    //! called once per frame. time a value between 0 and 1
    //! For example: 
    //! * 0 means that the action just started
    //! * 0.5 means that the action is in the middle
    //! * 1 means that the action is over
    public abstract void update(float time);


멤버 함수별 상세한 설명은 안에 잘되어 있으니 
하나의 프레임동안 호출되는 함수들의 순서를 정리하겟습니다. 

바로 이렇습니다. 여기서 유추할수 있는건 이런 액션멤버변수들을 호출하는 무언가가 있다라는것이죠 일단 지금은 그정도로만 알고 있죠 무언가가 액션의 멤버 변수를 호출한다.그것도 체계적으로 말이죠 

 

CCAction은 아래 클래스로 확장 됩니다. 

CCFiniteTimeAction  
CCRepeatForever and CCSpeed

그럼 이 2가지 놈들과 CCAction의 관계를 볼까요?

CCFiniteTimeAction   과  CCAction의 관계입니다. 



CCRepeatForever  과 CCAction의 관계입니다. 


CCSpeed과 CCAction의 관계입니다.   

출처: http://www.cocos2d-iphone.org/api-ref/0.99.0/annotated.htm 


 보시다 시피 나머지 2개는 아직 알아 보지 않는 CCIntervelAction을 멤버로 가지고 있습니다.  그럼 
CCFiniteTimeAction  을 먼저 살펴보는게 맞을듯합니다. 


CCFiniteTimeAction  는 말그대로 한정된 시간을 가지는 액션입니다. 
클래스 설명을 보면

/** Base class actions that do have a finite time duration.

 Possible actions:

   - An action with a duration of 0 seconds

   - An action with a duration of 35.5 seconds

 Infitite time actions are valid

 */


 시간을 가지는액션의 기본클래스 입니다. 
0seconds 는 바로 CCNode 의 속성을 즉시 변경한다는 말이고 .
35.5 seconds는 CCNode의 속성을 35.5초 동안 변경한다는 말입니다.

CCAction의 멤버 변수외에  float duration이 추가 되었습니다. 
물론 이에 대한. set ,get 함수는 추가 되었구요.
하나 눈여겨 볼만 한것은.
멤버 한수로써 

public CCFiniteTimeAction reverse() {
        ccMacros.CCLOG(LOG_TAG, "Override me");
        return null;
 }

이 추가 되었다는 것입니다.  그리고 나서 자기를 상속한 클래스보고 오버라이딩 해라고 친절하게 말해 주세요 ㅎㅎㅎ 


이제 남은 것은 
CCRepeatForever and CCSpeed 요건데 위에서 보시다 시피 CCIntervelAction이 머하는건지 알수 있다면 좀더 이해가 빠를 것이라 생각됩니다. 

그래서 다음 강좌는  
CCIntervelAction 에 대해서 다루어 보겟습니다. 
Posted by 수다쟁이증후군 :
카메라 머지 이거 왜 2D에 카메라가 필요하지 흠.....했지만 조금 생각해보니 머 필요할수 있겟다 싶기도 하다 . 머라 설명할길이 없네. ㅠㅠ
아래는 전체 소스입니다.

/**

    A Camera is used in every CocosNode.
    카메라는 모든 CCNoed에서 쓰인다 

    Useful to look at the object from different views.
    다른 시점에서 object를 바라볼때 유용하다 

    The OpenGL gluLookAt() function is used to locate the

    camera.
    카메라의 위치를 변경시키려면 오픈GL의 gluLookat() 함수가 이용된다.
   

    If the object is transformed by any of the scale, rotation or

    position attributes, then they will override the camera.
    오브젝트의 크기라던지 회전이나 위치변경을 한다면 camera를 오버라이딩 해라 

 

       IMPORTANT: Either your use the camera or the rotation/scale/position properties. You can't use both.

    World coordinates won't work if you use the camera.
    정보ㅋ : CCCamera를 쓰던지  CCNode의 
rotation/scale/position 속성값을
    변화시키던 결과물은 같을수 있지만 동시에 사용하지마.
    카메라를쓴다면 월드 축을 변경하지마. (기준이 없어지니까  결과 물을 예측할수가 없으니까 쓰지마라는 뜻인듯)

 

    Limitations:
    제한 : 

 

     - Some nodes, like CCParallaxNode, CCParticle uses world node coordinates, and they won't work properly if you move them (or any of their ancestors)

       using the camera.
몇가지 클래스 특히  
CCParallaxNode, CCParticlesms 월드 Node 축 사용해라.
만약 이놈들(상위클래스 포함)을 카메라를 이용해서 작업하다면 적절하게 동작하지않을수 있다 (결과물을 예측하기 힘들다) 

*/
이거나 해석해볼까요 ㅎㅎ
  
회전각도 변경,크기 변경, 위치변경은 CCNode속성을 이용해서 할수도 있고 CCCamera를 가지고도 할수 있으니 제한적은 부분이 있으니 CCCamera 를 쓰지말것. 이란다.
근데 이거 CCNode 의 레퍼런스 변수로 CCCamera가 있다.  좀 더신중히 접근해봅시다. ㅎ
일단은 직접 사용을 자제 해봅다

                 작성날짜 2011년 09월 10 입니다 추후 변경 해보려 합니다.  
Posted by 수다쟁이증후군 :
cocos2d를 하는 와중에 미친척하고 모든 클래스분석 한번 해봅니다. 

package org.cocos2d.types; 

//! A 2D grid_ size

public class ccGridSize {

    public int x;

    public int y; 

    //! helper function to create a ccGridSize

    public static ccGridSize ccg(final int x, final int y) {

        return new ccGridSize(x, y);

    } 

    public ccGridSize(int x, int y) {

        this.x = x;

        this.y = y;

    } 

    public ccGridSize(ccGridSize gs) {

        this.x = gs.x;

        this.y = gs.y;

    }

}

그리드 사이즈를 위한 클래스 입니다. 
별다른거없고
가로 세로 크기 지정으로 위해서 int 로 값을 만든것뿐이네요

생성 예)
CCGridSize gs = CCGridSize.ccg(4,5); 
입니다.  

Posted by 수다쟁이증후군 :