this.infiniteRotate = cc.tween(this.wheel).delay(0.8).by(0.4, { angle : -360 }).repeatForever().start();
0.8초의 첫 대기시간을 가진 뒤, 0.4초동안 360도 회전하는 동작을 무한히 반복하는 코드다.
크리에이터 버전 2.4.5에서 잘 작동하던 코드가 2.4.8 버전업 하고나서 문제가 생겼다.
[Action update]. override me 라는 로그가 계속 찍히면서 오브젝트가 회전하지 않았다.
구글링 결과 확실히 버전과 연관이 있는 버그였다.
https://forum.cocos.org/t/2-1-2-tween-repeatforever/80820
(중국어 답변을 구글 번역기로 돌림) 여러 차례 이 글을 읽어본 결과.
"모든 FiniteTimeAction이 시퀀스에 추가될 수 있어야하지만 RepeatForever는 추가할 수 없다는 것입니다."
이 문장이 핵심인것 같다. FiniteTimeAction은 by, to, call 같은 Tween 클래스의 함수들을 의미한다.
this.infiniteRotate = cc.tween(this.wheel).by(0.4, { angle : -360 }).repeatForever().start();
실제로 delay를 빼니까 정상 작동 했다.
delay가 아니더라도 repeatForever 앞에 두 개 이상의 Action이 있으면 repeatForever가 작동을 안하는 문제였다.
this.infiniteRotate = cc.tween(this.wheel)
.delay(0.8).repeatForever(cc.tween().by(0.4, { angle : -360 })).start();
해결책으로 제시되는 방안으로 수정해봐도 문제는 해결되지 않았다.
위의 코드는 여전히 같은 에러를 출력하고, delay를 빼야 작동한다.
this.infiniteRotate = cc.tween(this.wheel)
.delay(0.8)
.call(() => cc.tween(this.wheel).by(0.4, { angle : -360 }).repeatForever().start())
.start();
두 번째 방법으로는 repeatForever 앞에 하나의 작업만 오도록 tween 자체를 2개로 나누는 것이다.
이렇게 하면 본래 의도대로 작동을 하긴 하는데...
this.infiniteRotate.stop();
문제는 this.infiniteRotate 트윈을 중지시켜도, 그 안에 있는 repeatForever 트윈은 멈추지 않는다.
repeatForever 트윈까지 변수에 담아서 중지시켜줘야한다.
코코스 놈들아......
'Cocos Creator' 카테고리의 다른 글
일정시간 동안 숫자 증가시키는 UI (0) | 2022.03.18 |
---|---|
실시간 시간 표시 (Timer) (0) | 2022.03.18 |
비동기 함수 실행 방법들 (0) | 2022.01.07 |
getChildByName (0) | 2021.06.11 |
cc.tween (0) | 2021.06.09 |