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