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.
는 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 액션은 자신이 원했던 결과물을 얻을수 없을지도 모릅니다.
'안드로이드 cocos2d 강좌 > cocos2d 안드로이드 클래스 심화' 카테고리의 다른 글
CCEaseAction 의 라스트 정리 (또 다른 시선) (cocos2d for android) (0) | 2011.09.15 |
---|---|
CCEaseSineIn / CCEaseSineInOut / CCEaseSineOut 클래스 분석 (cocos2d for android) (0) | 2011.09.15 |
CCEaseRateAction 와 상속 클래스 분석 (cocos2d for android) (0) | 2011.09.15 |
CCEaseExponentialIn / CCEaseExponentialInOut / CCEaseExponentialOut 클래스 분석 (cocos2d for android) (0) | 2011.09.15 |
CCEaseBounce 와 상속 클래스 분석 (cocos2d for android) (0) | 2011.09.15 |
CCEaseBackIn / CCEaseBackInOut / CCEaseBackOut 클래스 분석 (cocos2d for android) (0) | 2011.09.15 |
CCEaseAction (cocos2d for android) (0) | 2011.09.14 |
CCCameraAction 와 CCOrbitCamera (cocos2d for android) (0) | 2011.09.14 |
CCIntervelAction의 상속 클래스들 분석. (0) | 2011.09.14 |
CCIntervelAction과 CCInstantAction (cocos2d for android) (0) | 2011.09.14 |