'CCEaseBounceIn'에 해당되는 글 1건

  1. 2011.09.15 CCEaseBounce 와 상속 클래스 분석 (cocos2d for android)
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 수다쟁이증후군 :