'안드로이드 cocos2d 강좌'에 해당되는 글 20건

  1. 2011.09.15 CCSprite 정의와 생성방법 (cocos2d for android)
  2. 2011.09.15 CCEaseAction 의 라스트 정리 (또 다른 시선) (cocos2d for android)
  3. 2011.09.15 CCEaseSineIn / CCEaseSineInOut / CCEaseSineOut 클래스 분석 (cocos2d for android)
  4. 2011.09.15 CCEaseRateAction 와 상속 클래스 분석 (cocos2d for android)
  5. 2011.09.15 CCEaseExponentialIn / CCEaseExponentialInOut / CCEaseExponentialOut 클래스 분석 (cocos2d for android)
  6. 2011.09.15 CCEaseElastic 와 상속 클래스 분석 (cocos2d for android)
  7. 2011.09.15 CCEaseBounce 와 상속 클래스 분석 (cocos2d for android)
  8. 2011.09.15 CCEaseBackIn / CCEaseBackInOut / CCEaseBackOut 클래스 분석 (cocos2d for android)
  9. 2011.09.14 CCEaseAction (cocos2d for android)
  10. 2011.09.14 CCCameraAction 와 CCOrbitCamera (cocos2d for android)
  11. 2011.09.14 CCIntervelAction의 상속 클래스들 분석.
  12. 2011.09.14 CCIntervelAction과 CCInstantAction (cocos2d for android)
  13. 2011.09.14 CCAction 와 CCFiniteTimeAction (cocos2d for android)
  14. 2011.09.13 장면전화방법 과 장면전화효과 개념부터 잡고 가자!(cocos2d for android)
  15. 2011.09.11 SoundEngine 간단 정리 (cocos2d 안드로이드 )
  16. 2011.09.10 CCCamera 클래스 분석
  17. 2011.09.10 CCGridSize 클래스 분석 (미친척하고 해보자 cocos2d for androd)
  18. 2011.09.05 2-1. CCAction은 어디에 쓰는걸까?(cocos2d android 강좌)
  19. 2011.09.05 2. CCAction은 어디에 쓰는걸까?(cocos2d android 강좌)
  20. 2011.09.05 1. 개념잡기 sprite,layer,scene,director(cocos2d android 강좌)
1. 정의
스프라이트 별거 없습니다 그냥 2D이미지입니다. 단지 용어가 익숙하지 않을뿐다시 반복하자면 에스아이 s p r i t e  스프라이트.  2D 이미지 간단히 사진이라 그림,글자 그림 이라고 생각하시면 됩니다
==>cocos2d 를 배우는 이유가 화면에 이미지띄우고 왔다리 갔다리 하기위한거니까 
     생성방법은 숙지하세요... 사실 숙지고 머고간에 너무 간단해서 그냥 한번만 보면되요 ㅎ
 


2. 생성 방법
2-1. 파일이름으로 생성하기(첫번째)

CCSprite tamara = CCSprite.sprite("grossinis_sister1.png");

==> 간단하죠  파일은 Assets 폴더에 넣어주세요 .
==> 파일이름은 확장자 포함입니다.  
==> png / bmp / jpeg 파일 지원 



2-2. 파일 이름으로 생성하기(두번째)

CCSprite spriteNormal = CCSprite.sprite("menuitemsprite.png",                                                                           CGRect.make(0,23*2,115,23));

==> 위와 같이 동일하게 파일 이름을 이용하지만 CGRect.make(top,left,bottm,rigth) 를
      이용하여 이미지 파일의 특정영역으로 부터 CCSprite 객체를 생성합니다.
==> CGRect 클래스는  간단하게 자바클래스 RectF클래스와 유사하다고 생각해주세요  
      바로 보실분들은 보세요^^;;    
2-3 2D텍스쳐 이용하여 만들기

CCTexture2D tex2 = CCTextureCache.sharedTextureCache().addImage("grossini.png");

CCSprite grossini = CCSprite.sprite(tex);

Posted by 수다쟁이증후군 :
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 수다쟁이증후군 :

이전 강좌에서는 메뉴생성과 동작에 대해서 알아 보습니다.  


그리고 나서 sound 에 대해서 간단히 알아 보았습니다. 


자 그럼 이제 무었이 필요할까요?
제목에서도 나와 있듯이 메뉴를 누르고 소리나고 난뒤에 다른  어플리케이션이 먼가 해주어야겟죠. 그대표적인 예가 다른장면. 메뉴를 눌렀으면 그에 합당한. 다른 화면이 나와워야고 생각합니다. 그장면 전환도 그냥 하는게 아니고 먼사 쌈박한게 해주면 좋겟죠 화려하게 ㅎㅎㅎ 

그럼 이제 우리가 알아야 할것은 2가지입니다.

첫번째 : 장면전환 방법과 
두번째 : 장면전환 효과 

이렇게 2가지입니다. 

그럼 그
첫번째  장면 전환 방법입니다. 본개념강좌에서 보앗듯이 
장면 즉  Scene를 관리하는것은 Direction입니다. 그럼 Direction에 보면 장면
전환에 관련된 함수들이 있을거라고 예상할수 있죠. 
실제 소스를 찾아보니 . 

위와 같이 있더군요 . 

runWithScene , replaceScene , pushScene , popScene

runWithScene는 Scene를 시작하는거니까 일단패스
replaceScene 오케이 교체 요거 일단 접수. 
어라 근데 push,pop 오호 ~~~ director는 Scene 관리는 스택 개념으로 
하는구나 . ㅎㅎㅎ 좋았어

그리고 생각해봅시다. 
장면의 전환을 할 때 2가지 경우가 있습니다.(이전과 이후 )
 1. 이전 장면의 데이터를 보관해야 할때!(ex 게임중간에 설정으로 전환)
    ==>
pushScene and popScene
 2. 이전 장면의 데이터를 보관안해도 될때(ex 메뉴에서 게임 화면의로의 전환)
    ==>replaceScene 
으로 사용하면 되겟네요 ㅎㅎ


두번째  장면 전환 효과입니다. 
이것도 어떨때 어떻게 사용하라고 정의하면 좋겟지만 이거야 만들고 싶은 사람 마음니까 
머라고 정의 할 수 없겟네요. 한가지 느낌점은 장면 전환이 Action과 상당히 유사성이 많게 보입니다. 실제 어떤 장면전화효과는 액션을 몇가지 썩어 놓기만 했네요. 
비록 30 여개의 장면전환클래스가 있다지만 이것만이 전부가 아니겟지요. 일단 하나하나 테스트 해보세요 . 그리고 나서 자신만의 장면 정환 효과를 만들어 본다면  상당히 재미있을듯합니다. 

아참 그전에 한가지 정리 할고 갈것이 있네요. 바로 
CCScene에 장면효과를 주는 것이 아니고 장면효과를 가지는 CCScene(CCTransitionScene)를 만든다는것입니다. 언듯 보면 말장난 같지만 이 두가지의 차지점은 상당히 큽니다. 







Posted by 수다쟁이증후군 :

막상 메뉴를 해놓고 보니까 소리가 없어서 먼가 및및하더군요 . 
타격감이 없다고 해야 하나 .  그래서 다른것 하기전에 이것부터 할려구요 

바로 싸운드 음..예제 소스 부터 보실래요 ^^?
 

그냥 쭈욱 한번 보세요 ㅎㅎ

진짜 별거 없죠 ㅎㅎㅎㅎ
그럼 일단 싸운드 정리 부터 할까요?

cocos2d는 게임을 의해 만들 라이브러리 라고 해도 과언이 아니겟죠 ? ^^ 
자 그럼 게임에 싸운드가 나오는 경우가 2가지 있습니다. 

바로 배경음악과  효과음 
2가지로 나누어 집니다. 
cocos2d 그래서 언듯생각한것이 2가지 클래스가 따로 있나 싶었는데 
바로 SoundEngine 바로 여기서 2가지를 전부 관리 하더군요. 

실제 코드에서 쓰인 부분은 간단 합니다. 
첫번째 로 백그라운드음악 설정할때

public void onEnter() {

super.onEnter();

     SoundEngine.sharedEngine().playSound(app, R.raw.backsoundtrue);

}

바로 이부분입니다. 오호 저기또 share  란 접미사가 붙어있는거 보니 싱클톤이네요 

첫번째 인자는 Context
두번째 인자는 Raw 폴더에 있는 파일이름
세번째는 반복재생 할건지 말건지 입니다.(배경음 이니까 당연히 무한 반복 들어값니다.) 


그리고  효과음입니다. 
효과음이 필요한곳에다가 
SoundEngine.sharedEngine().playEffect(app, R.raw.effect);

요렇게만 쓰면 됩니다.
첫번째 인자값은 컨택스트
구번째 인자값은 Raw 폴더에 있는 파일입니다.

진짜 초간단하죠 ㅎㅎㅎㅎ 너무 간단해서 어이가 없을 지경입니다. 
홈피에서는 5초이상 쓰이는건 미디어 플레이어 쓰고  3초 이하 정도면
이펙트를 사용하는것을 추천합니다. 



자이제 간단하게 사용하법 법을 보았습니다. 
일단 비교 대상이 2개뿐이니까 이번엔 표로 한번 정리해볼까요?
   배경음악 효과음 
 안드로이드와 연관성  MediaPlayer사용  soundpool 사용
 적용시점  화면이 있을때   사용자의 반응에 대해서  
 끝나는 시점   어플종료 / 화면이 안보일때  일회성이므로 사용후바로 끝


배경음악의 시작시점을 보겟습니다 이건 어디서 알수 있을까요? 

CCNode  관련 클래스가 화면에 나타날때(생성될 때) onEnter() 함수가 호출됩니다. Layer도 레이어니까 CCNode 클래스를 상속받았으니 OnEnter() 함수롤 오버라이드 한 바로이곳에서 배경음악을 실행합니다. 



배연음악은 언제 안들리게 해야 하나요?

어플이 종료되었을때 와 어플이 화면에서 안보일때(background) 입니다. 그리고 커스텀하게 해당 레이어가 없어지거나 안보일때 입니다. 
일단 레이어가 화면에서 사라지거나 어플이 background로 들어가는 것은 사용자 입장에서는 같다고 할 수 있습니다. 그럼 이때 일시정지를 하고 어플이 종료될때는 Mediaplayer를 realease 해줍니다. 그럼 레이어가 사라질때 호풀되는 함수가  먼고하니 바로
OnExit()입니다 여기에 바로 일시정지를 넣어줍니다. 
그리고 어플이 종료될때 OnDestroy 입니다.여기서종료해 주는거죠 ]
cocos2d에 있는 예제는 워낙 단순하여(한개의레이어) 커스텀한경우는 없네요
차후 실제 게임 만들기 강좌에서 보다 자세히 다룰께요. 




자 이번엔 효과음입니다. 효과음은 언제 이루어질까요?

사용자가 디바이스 어떤 동작을 취할때 입니다. 그때 호출되는 콜백 함수에 
사용하면 됩니다. 보통 터치 이벤트가 발생했을때 사용됩니다.  

 public boolean ccTouchesBegan(MotionEvent event) {

        SoundEngine.sharedEngine().playEffect(app, R.raw.effect);

            return CCTouchDispatcher.kEventHandled;

}
 이건데요 일단 Layer가 터치를 받을때 화면에 누르는 순간에 저함수가 호출됩니다. 


아 참고로 안드로이드 사용할때 보면 soundpool을 좀세부적으로사용하는
아직 cocos2d에서는 그걸 컨트롤하는 함수가 아직 지원되지 않습니다. 이는 추후에  보완되겟죠 . 


오늘은 sound 에 대해서 간단히 진짜 간단히 보았네요 . 추후강좌에서는 좀더 세부적으로 다룰수 있도록 해보겟습니다. 일단 오늘은 요까지만. 


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 수다쟁이증후군 :

저번 정리에서는 CCNode에 대해서 알아 봤는데요 그놈이 대충 먼지알았으니까 그놈에 속성을 변경시키는 CCAction에 대해서 알아봅시다.

 

음 본격적으로 알아 보기전에 액션관련 클래스는 얼마나 몇 개나 있을까 하는 궁금함이 들어서확인해봤습니다.


관련 패키지만 8 클래스는 113 .  이런 씨부.~~~진짜 많네


org.cocos2d.actions  (5
)

org.cocos2d. base (5

org.cocos2d.actions. camera (2)

org.cocos2d.actions. ease (22)

org.cocos2d.actions. grid (17)

org.cocos2d.actions. instant(10)

org.cocos2d.actions. interval(28)

org.cocos2d.actions. tile(14)


더럽게 많네요  ㄷㄷ
자 그럼 본격적으로 가보죠 

위에 분류는 패키지별 분류입니다.

홈피에서는 분류는 속성을 기준으로 하여 분류해놓았더군요.

§  position

§  CCMoveBy

§  CCMoveTo

§  CCJumpBy

§  CCJumpTo

§  CCBezierBy

§  CCBezierTo

§  CCPlace

§  scale

§  CCScaleBy

§  CCScaleTo

§  rotation

§  CCRotateBy

§  CCRotateTo

§  visible

§  CCShow

§  CCHide

§  CCBlink

§  CCToggleVisibility

§  opacity

§  CCFadeIn

§  CCFadeOut

§  CCFadeTo

§  r, g, b

§  CCTintBy

§  CCTintTo

 

그럼 가장 첫번째 있는 position 속성을 변화 시키는 CCMoveBy 클래스를 보도록 하겟습니다.

기본액션 이라길래 org.cocos2d. base (5)에 있는줄 알고 차아 보니까 없더군요.. 머지 했습니다 그래서 다시 살펴보니 .
org.cocos2d.actions. interval(28
) 패키지에 있었습니다. 이것도 머지 했죠 . 머지 머지 ? 인터발 이면 시간인데.. 아하 위치 변경할 때도 시간을 줄수 있구나 . 오호 ~~~ 이런 세심한 배려까지 . ㄷㄷ 그래서나머지 부분들도 찾아 보았습니다. 결론은 basic Action중에서 

§  CCPlace

§  CCShow

§   CCHide   

§ CCToggleVisibility

요기 4가지는 org.cocos2d.actions.instant(10)있었습니다. 인스턴스는 일회적이란는 말인데 음....일회적 아니 빠른 순간적 이라는 말인가 ?
그럼
시간속성이 없다라는 말은 순간적으로 이루어 진다 시작 ~ ! 하면 바로 끝난다. 해서

CCInstantAction 

간단하죠 ㅎㅎㅎ 그렇다는 말은 홈피에서 말하는 기본액션중
위에 4가지만 쓰는 방법(함수형식) 다르고 나머지 들은 거의 같다 라는 이상한 결론이 도출되네요 .

그럼 실제로 비슷한지 코드를 한번 볼까요?  

CCMoveTo actionTo = CCMoveTo.action(2, CGPoint.ccp(s.width-40, s.height-40));
CCMoveBy actionBy = CCMoveBy.action(2, CGPoint.ccp(80,80));
CCJumpTo actionTo = CCJumpTo.action(2, CGPoint.ccp(300,300), 50, 4);

CCJumpBy actionBy = CCJumpBy.action(2, CGPoint.ccp(300,0), 50, 4);



CCBezierConfig bezier =
new CCBezierConfig();

bezier.controlPoint_1 = CGPoint.ccp(0, s.height/2);

bezier.controlPoint_2 = CGPoint.ccp(300, -s.height/2);

bezier.endPosition = CGPoint.ccp(300,100);

CCBezierBy bezierForward = CCBezierBy.action(3, bezier);

CCBezierConfig bezier2 = new CCBezierConfig();

bezier2.controlPoint_1 = CGPoint.ccp(100, s.height/2);

bezier2.controlPoint_2 = CGPoint.ccp(200, -s.height/2);

bezier2.endPosition = CGPoint.ccp(240,160);

CCBezierTo bezierTo1 = CCBezierTo.action(2, bezier2);

 

CCScaleTo actionTo = CCScaleTo.action(2, 0.5f);

CCScaleBy actionBy = CCScaleBy.action(2, 2);


CCRotateTo actionTo = CCRotateTo.action(2, 45);

CCRotateBy actionBy = CCRotateBy.action(2, 360);


CCBlink action1 = CCBlink.action(2, 10);

CCFadeIn action1 = CCFadeIn.action(1.0f);

CCFadeOut action1Back = action1.reverse();

CCFadeOut action2 = CCFadeOut.action(1.0f);

CCFadeIn action2Back = action2.reverse();

CCFadeTo action1= CCFadeTo.action1 (2, 3)


CCTintTo action1 = CCTintTo.action(2, ccColor3B.ccc3(255, 0, 255));

CCTintBy action2 = CCTintBy.action(2, ccColor3B.ccc3(-127, -255, -127));

 

오호 비슷하네요 파라미터로 2개를 가지구요.

첫번째는 시간관련 (참고로 데이터 형은 float )이구요

두번째 파라미터는 각속성과 관련된 변수(레퍼런스)들 입니다 

 

이렇게 보니까 간단하게 보이는건 저뿐인가요 ^^;; 아 참고로 한가지 더

시간 관련 파라미터의 단위는 (첫번째 파라미터) “ 입니다.

1 이라고 있으면 1초이고 0.5 0.5초입니다.

 

자그럼 시간이 포함된 기본액션 클래스들을 보았으니 시간 변수가 표함 기본액션들을 살펴 보겟습니다.시간이 포함안되어있으니까 시간 관련 파라미터는 없겟고 기본액션이니까 하나의 속성을 변화 시키는거니까 음.. 그럼 파라미터는 한 개 겟네 ? 라고 생각할수 있습니다.  과련 맞을까요?


그럼 살펴봅시다
.

CCPlace.action(CGPoint.ccp(200,200))

CCShow.action()

CCHide hide = CCHide.action();

CCToggleVisibility tog1 = CCToggleVisibility.action();

 

어라 CCPlace 말고는 파라미터가 없네요 . 이런젠장.

Show Hide로 묶으면 파라미터 하라고 주고 보여줄지 말지를 묶을수 있는데 ㅠ 그러면

ToggleVisibility 묶을수도 있었는데 ㅠㅠ 예상이 빛나가버렸네요 .

이건 cocos2d 있는 코드니까 예측이 빛나갔더라고 실망하지말자궁 ㅠㅠ. 그래도 반은 대충 맞추었자나요 ㅠㅠ  아그러고 보니 jump 인자값이 4개네요 시간 포지션 간격 횟수

이정도 ㅠㅠ아 젠장 페이드인이랑 페이드 아웃도 인자 값이 하나네요ㅠㅠ. 가만히 생각해보니까 인자 하나만 있으면 되네요. 어차피 사라질꺼 시간만 있으면 되는거였네요 . 생각보다 많이 빗나가는뎁쇼 ㅈㅅ. ㅠㅠ

 

 

.. 한가지 중요한 것을 빼먹었네요. 클래스 뒤에 By To 의미가 먼지 궁금하실수도 있겟네요. 이건 바로 절대값 상대값 차이입니다.

By = 상대적 개념
To = 절대적 개념


절대값이라
하면 기준을 0으로 한거구요 위치면 0,0이겟고  회전은 0 scale 이미지 기본사이즈에서 얼마만큼 커지던지 작아 지던지가 되게네요.

그럼 상대값은 준을 자기 자기 위치면 현재위치 회전은 현재 회전된 값부터 scale 조금 애매하긴하네 .
 
 

그리고 재밌는 것은 By To 상속해서 만들었다는 것입니다. 잘생각 해보면 To 기분 이미지정해져 있다는 것뿐이지 실제적인  처리는 By 같다는 거죠 . 다시 말해서

절대적이함은 절대적 기준은 가진다는 결국 기본값이 정해져있다라는 말고 동일하죠 .이걸 디폴트라고 하죠 ㅎㅎ. 이제 어느정도 정리가 되어 가나요?

 

 

마지막으로 cocos2d에서 재밌는 기능을 가진 것이 있네요.

바로 reverse 액션 현재 까지 변화시킨 속성을 반대로 되돌린다 것인데도 쓰는 법도 간단합니다.

action 클래스 변수에 대고 점하나 찍고 reverse라고 써주기만 하면됩니다.  

 

CCFadeOut action2 = CCFadeOut.action(1.0f);

CCFadeIn action2Back = action2.reverse();

 

이렇게요 . ㅋㅋ 쉽죠 ㅎ 

 이로써  기본 액션 Base Action에 대해서 정리 되었습니다.


자 마무리하자면
Action Node의 속성을 변화 시키는 것이다. 그리고

그 속성별로 액션을 구체화 하여 각족 Action 파생클래스를 만들어 쓰기 쉽게 만든것이다.

라고 하면 될까요 ㅎㅎ

 

자 이제 액션을 사용할 Node를 어떻게 선언하는지만 알면 실제 액션 사용 코드를 볼수 있겟네요. ㅎㅎㅎ 

오호 ~~` 그런데 기왕 액션에 온거 단일액션만 보지말고 액션조합 어떻게 하는지 보고 갈까요?


그럼 이제 우리가 알아 보았던 액션들을
  결합해봅시다.

액션을 순차적으로 진행 할수 있고

액션을 모아서 한번에 같이 진행할수 있고 . 

그리고 이런 것들을 몇번이나 반복할것인지 한번 ? 두번? 세번? 무한히?

그것들이 바로

§  Sequence action

§  Spawn action

§  Repeat action

§  RepeatForever action

입니다.

CCSequence  이렇게 사용합니다.

CCMoveBy move_tamara = CCMoveBy.action(1, CGPoint.ccp(100,0));

CCMoveBy move_tamara2 = CCMoveBy.action(1, CGPoint.ccp(50,0));

CCHide hide = CCHide.action();

CCSequence seq_tamara = CCSequence.actions(move_tamara, hide, move_tamara2);

 

CCSpawn 요렇게 사용하구요

CCAction action = CCSpawn.actions(

CCJumpBy.action(2, CGPoint.ccp(300,0), 50, 4),

CCRotateBy.action(2, 720));

CCRepeat 이러구요

CCRotateTo act1 = CCRotateTo.action(1, 90);

CCRotateTo act2 = CCRotateTo.action(1, 0);

CCSequence seq = CCSequence.actions(act1, act2);

CCRepeat rep2 = CCRepeat.action(seq, 10);


CCRepeatForever 도 있네요  
CCRepeatForever rep1 = CCRepeatForever.
action(seq);

 

추가로 액션의 복사 copy() 있습니다.

CCMoveBy a1 = CCMoveBy.action(1, CGPoint.ccp(150,0));

CCRepeatForever action2 = CCRepeatForever.action(

                           CCSequence.actions( a1.copy(), a1.reverse()));

 

이까지가 기본적인 액션에 대한 이해 였습니다.

자자 이제 슬슬 CCNode 선언 하러 가볼까요

Posted by 수다쟁이증후군 :


액션에 대해서 본격적인 작업이 진행 되네요.
공식 홈페이지에 이렇게 정의 되어 있습니다.


-Action이란-
 

액션은  CCNode 오브젝트에 명령을 내리는 것과 같습니다
보통 position, rotation, scale 등과 같이 객체의 속성을 변경합니다. 

근데 여기서 문제점. CCNode가 무엇인지를 모른다는 거죠  객체의 속성을 바꾼다라는 말이다 이해할수있으니 . 다른말로 풀자면 CCNode 오브젝트의 속성을 변경시키는행위(코드,API)를 말한다라고 할수 있습니다
그러나 여전히 CCNode가 모르긴 마찬가지네요

 

그래서 검색 cocos2d소스를 보니

org.cocos2d.nodes 패키지안에 있더군요.

 


그럼
 CCNode 가보겟습니다

CCNode mainelement로써 대부분 클래스의 최상위 클래스 라네요 java 에서 object클래스와유사 한듯 보입니다. 

물론 CCNode object 클래스를상속받지만정확히 하자는 것이 아니라 개념적으로 최상위 클래스 라는 이야기를 하고자 한말입니다.

CCNode 클래스는 최상위 클래스 이다 라는 말은 클래스적인 측면측면 봤을 때 하는 이야기 이고 그럼 이놈이 도대체 어던놈인가에 대한 물음은 여전히 남네요.

 
 

그래서 CCNode 클래스 설명을 다시 보게되네요.

Anything thats gets drawn or contains things that get drawn is a CCNode.
(화면에 그려지거나)  (그려지는 것을 포함하는 것 CCNode 이다. 

그려지는 건 머 글자나 이미지 이런것이겟고 이런 것을 포함하는게레이어 니까(이해가 안되신다면 이전강의를 참고-클릭하시면 새창으로 볼수 있습니다.  )
 

CCSplite 클래스와CCLayer 클래스를 상속하는 모든 클래스 가CCNode이다.(이말은 oop에서 is a 관계네요작가는 사람이다작자는 하위클래스 사람은 상위클래스)

2개를 합치면 화면에 그려지는 것들과 그것을 포함하는 것은 CCNode클래스를상속한다 이네요.(영어 한줄에 대한 주석이 몇줄이니 ㅠㅠ)


이정도면 감을 잡으셨을라나
  ㅎㅎ  우리가 화면에 그려지는 것을 좀더 깔끔하고 쉽게 하기위해서 cocos2d를 쓰는 것이니까 이제 대해서 좀더 상세히 살펴볼필요가 있겟네요.

CCNode 클래스위 주요특징 3가지

1.-1

They can contain other CCNode nodes (addChild, getChildByTag, removeChild, etc)

CCNode는 다른 CCNode를 포함할수 있다. 당연한 말이죠 정의에서 이미 화면에 그려지는것과 그것을 담을수 있는 것이CCNode 라고 했으니까 그러니까 패스

1-2.

They can schedule periodic callback (schedule,unschedule, etc)
주기적으로 콜백 호출할수 있다 

이말은  타이머네요여기서 콜백은 내부적으로

CCScheduler 클래스가 관리합니다. 소스를 하나 하나 따라 들어가면좋겟지만 일단 개념만 잡읍시다. cocos2d 사용하는게 편하자고 하는거지 이걸공부하자고 하는건 아니자나요너무 깊게 파고 들어가면 주객이 전도 되어 버릴듯하네요물론 잘사용하기 위해서는 내부적으로어떻어 돌아가는 것을 알면좋지만 말입니다이는 나중에 시간되는 대로 소스 분석해서 봅시다아니면 궁금하면 질문해주세요제가 분석가능한내로 설명해드릴께요일단 일정시간마다 특정행동을 할수 있다 이정도만 합시다.

1-3.

They can execute actions (runAction, stopAction, etc)

액션을 실행시킬수 있다 . 이제야 글의 제목과 관련있는 부분이 나오네요. action node와의 관계 ㅎㅎㅎ 요기서 지금까지 알수있는 내용만으로 정리 한번 하자면 
액션은 Node의 속성을 변화 시키고 그 시작은 Node가 한다. 이말은 액션변수를 파라미터로 하는 호출함수가 있다 또는 Node에 액션 변수가 있고 자신이 가지고 있는 액션을 시작하는 함수가 있다.  

 

그럼 CCAction CCNode의 속성을변경한다는건데 그 속성이 먼지도 모르는데 어떻게 CCAction을 파악할수 있다는건지 . ㅎㅎ

 

그럼 이제 속성에 대해서 알아봅시다몇가지 있느냐 하면 

- position
- scale (x, y)
- skew (x by degrees, y by degrees)
- rotation (in degrees, clockwise)
- CCCamera (an interface to gluLookAt )
- CCGridBase (to do mesh transformations)
- anchor point
- size
- visible
- z-order
- openGL z position


이렇게 11가지 있습니다.

위치 ,크기,기울기,회전각,카메라,메쉬를 위한그리드베이스 ,축 위치,크기,보여줄것인가 말것인가,레이어 순서 ,그리고 좀 이해안되는 z-position 이거는3D 개념인데 왜있는거지 . ㄷㄷㄷ

근데 메쉬가 머야 그리드는 격자무늬인데 이게왜 메쉬란놈이랑 연관되는거야 ?그리고 scale size의 차이점은 머지 이런 궁금증이 있을겁니다.
자도 궁금하네요 이게 도대체 멀까요  ㅎㅎㅎ일단은 

위에궁금한 사항들을 제외한 나머지 속성들은 CCNode 클래스 정의를다시 생각해보면 충분히 이해가 가리라 생각합니다

화면에 그려지는것과 그것을 포함하는것 화면에 어디에 그려그려질 것인가
?원래 크기를 줄일것인가 말것인가?이미지 좀기울이면안되나시계방향으로 좀회전시킬가회전시킬때상단 맨위위를 기준으로 할까 아니면 중앙을 기분으로 할까이런게 변화된 이미지를 보여줘야하나 ? 잠시 빼버릴까최상위레이어를 배경으로 쓰면 어떨까등등

화면에 그려지는 것에 대한 속성들을 모두 정리 해놓았습니다. 

대충 CCNode가 먼지  감이 오나요?  ㅎㅎㅎ
설명이 개떡 같아서 헷갈릴지도 모르지만헷갈리는건 질문해주세요 ㅎㅎ
 
 

그외에 CCNode의 프로그래밍적 측면을 위한 문구가 있더군요.

Some CCNode nodes provide extra functionality for them or their children.

Subclassing a CCNode usually means (one/all) of:
- overriding init to initialize resources and
schedule
callbacks
- create callbacks to handle the advancement of time
- overriding draw to render the node 


이런거라던지.

Order in transformations with grid disabled
 -# The node will be translated (position)
 -# The node will be rotated (rotation)
 -# The node will be skewed (skew)
 -# The node will be scaled (scale)
 -# The node will be moved according to the camera         values (camera)

 

 Order in transformations with grid enabled
 -# The node will be translated (position)
 -# The node will be rotated (rotation)
 -# The node will be skewed (skew)
 -# The node will be scaled (scale)
 -# The grid will capture the screen
 -# The node will be moved according to the camera         values (camera)
 -# The grid will render the captured screen

 

요런거 실제 프로그래밍 하면 이런게 더 와닿을지도 모릅니다다만이건 음..머랄까 일조의 tip이라고 생각합니다 물론 여기에대해서도 다룰겁니다그러나 아직은 개념 잡기 위한거니 다음 예제를 직접 보면서 할수 있을 때 정리해보도록하겟습니다.


~~ CCAction
을 알아볼라고했는데 어떻게 CCNode에 대해서 알아보았네요 .근데 무엇에 대한 action인지 에 대해서 모른다면 충분히 사용할수 없다라는 생각에 이렇게 장문의 글이 되고 말았네요.   잊지말것은 화면에 그려지는것과 그것을포함하는 것은 CCNode 를 상속한다입니다.

Posted by 수다쟁이증후군 :

코코스 홈페이지에 가면 정말 정리를 잘해놓았습니다.

따로 이렇게 강좌를 적을 필요도 없지만제가 이해한 것을 바탕으로

하나하나 다시 풀어 가보려 합니다.

 

게임개발에 대해서 저 처럼 처음인 사람들을 위해서 일단 용어 정리부터 해보려 합니다.

 

1.   sprite
스프라이트 별거 없습니다 그냥 이미지입니다단지 용어가 익숙하지 않을뿐다시 반복하자면 에스. 알아이 s p r i t e  
스프라이트.  2D 이미지 간단히 사진이라 그림,글자 그림 이라고 생각하시면 됩니다이는 물론 이동 회전 크기 Action(에니메이션)을 적용가능한니다한마디로 사진을 밀었다 땡겻다 돌렸다 뒤집었다 할수 있다는 말이죠

2.   Layer 
두번째로 할 것은 레이어 입니다레이어는간단히 종이 한장입니다물론 이 종이는 투명한 비닐 종이 일수도 있도 시커먼 먹지일수 도 있으며 새하얀 종이 일수도 있습니다여기 이 종이 위에 사진을 붙일수 있겟죠 즉 위에 서 설명한  . 를 레이어 위에 배치할수 있다는 거죠  즉 레이어는 스프라이트를 포함한다라고 정의해보겟습니다공식페이지서 설명한대로 게임 작업은 여기서 대부분에 시간을 보내게 됩니다.

3.   Scene
 
그리고 3번째로 장면이라고 해석해놓은 scene !!
Scene는 바로 레이어를 담는 그릇입니다.  

하나의 scene에 하나의 레이어도 올수 있고 다수의 레이어가 올라 갈수도 있습니다.  


     지금까지의  배용을 정리하면 
스프라이트는 레이어에 포함되고 레이어는
 Scene에 포함된다 라고 할 수 있습니다.

 

4.   Director 
자 마지막으로 디렉터는 간단하게 Scene를관리합니다scene 뒤에는 다음 씬이 나오고  다음 씬나오면 그다음씬 나오고 어라 생각해보나까 역순으로 돌리는 게 낮겟네  해서 씬순서 바꾸고 … 한마디로감독이죠 그리고 영화에서 감독은 한명입니다. cocos2D에서도 
디렉터는 하나분입니다프로그램 디자인에서 말하는 싱글톤.~~~

 

자 여기까지가 기본 개념입니다이제 세부 적으로들어가 봅시다물론 다음 강좌에서ㅎㅎ  아직 내용이 좀 허접합니다. ㅎ
Posted by 수다쟁이증후군 :