cocos2d-x runAction 정보
원래 C++11의 지식이 필요하거나 Android NDK에서 일부 빌드가 통과하지 않거나,
여러가지가 있었지만, 가장 집착한 cocos2d-x의 애니메이션에 대해 씁니다.
그 1 몇개의 Action을 호출할 때의 이야기
세 개의 스프라이트를 움직이고 싶다면 동시에 움직이고 싶다면 초보자 때
다음과 같이 설명했습니다.
1.1
auto circle = Sprite::create("circle.png");
auto triangle = Sprite::create("triangle.png");
auto square = Sprite::create("square.png");
this->addChild(circle);
this->addChild(triangle);
this->addChild(square);
circle->runAction(MoveTo::create(0.3, Vec2(100, 100)));
triangle->runAction(MoveTo::create(0.3, Vec2(100, 100)));
square->runAction(MoveTo::create(0.3, Vec2(100, 100)));
하지만,
Action을 멈추고 싶을 때나 Action 완료의 callback을 취하고 싶은 경우,
위의 쓰기는 그다지 적합하지 않았습니다.
위와 같은 Action을 하고 싶은 경우는 이하와 같이도 쓸 수 있습니다.
1.2
this->runAction(Spawn::create(TargetedAction::create(circle, MoveTo::create(0.3, Vec2(100, 100)),
TargetedAction::create(triangle, MoveTo::create(0.3, Vec2(100, 100)),
TargetedAction::create(square, MoveTo::create(0.3, Vec2(100, 100)),
nullptr));
1.2의 쓰는 방법이라면 애니메이션을 멈추고 싶은 경우, this->stopAllActions()로 일괄적으로 멈출 수 있습니다.
반대로 그 2로 벌써 this->runAction()를 실시하고 있는 경우, Action를 덧쓰기되어 버립니다.
TargetedAction은 매우 유용하며 Action의 가독성이 높아질 뿐만 아니라,
어떤 노드가 어떤 Action을 관리하는지 알 수 있습니다.
2 일부 Action이 호출 될 때의 이야기
다음과 같은 경우가있었습니다.
・エフェクトAを再生する
・エフェクトAのアクション完了時にエフェクトBとCを同時再生する
・エフェクトBかCのアクション完了時にエフェクトDを再生する
・ここのエフェクトだけちょっとスロー再生で
이 때에 이펙트의 클래스를 어떻게 쓸까를 헤매었습니다만,
어리석은 곳에서 다음 사항을 멈추면 깨끗했습니다. (개인의 감상입니다)
・그 클래스로부터 Action의 처리를 취득할 수 있는 것
・그 클래스로부터 Action의 처리를 던져 없이 할 수 있는 것
・duration은 외출
구체적으로 이런 느낌을 쓰면
HogeEffect.cpp
:
FiniteAction* HogeEffect::getPlayAction(float duration)
{
return TargetedAction::create(this, MoveTo::create(duration, Vec2(100, 100)),
}
void HogeEffect::runPlayAction(float duration)
{
this->runAction(getPlayAction(duration));
}
다음과 같이 호출할 수 있습니다.
this->runAction(Sequence::create(effectA->getPlayAction(0.1f),
Spawn::create(effectB->getPlayAction(0.2f),
effectC->getPlayAction(0.3f),
nullptr),
effectD->getPlayAction(0.4f),
nullptr));
Action에는 많은 파생 클래스가 있지만,
개인적으로는 Spawn, Sequence를 자주 사용하므로 FiniteAction*에서 정의하고 있었습니다.
h tp // w w. 여기 s2dx. rg/레후오렌세/나치ゔぇ-cp/V3. HTML
h tp // w w. 여기 s2dx. 오 rg / 레후 렌세 / 나치 ゔ ぇ c p / V3. HTML
h tp // w w. 여기 s2dx. rg/레후렌센스/나치ゔぇぇcp/V3. HTML
그 3 다른 언어 등과 비교한 이야기 (+래퍼 만들었습니다)
언어/도구
이름
특징
swift
SKAction 클래스 일반
cocos2d와 거의 동일
Unity 표준
애니메이션
커브 애니메이션 지정. Animator(Mecanim)와의 연계가 강력
Unity Plugin
iTween
ㅇㅇㅇㅇㅇㅇぇlp ぁ세멘 t. 이 m/그리고 x. php
ActionScript
BetweenAS3
h tp // w w.ぃ bs 파 rk. 오 rg / 우키 / 베토 에나 S3
ActionScript
Tweener
htps : // 여기. 오, ぇ. 이 m/p/와 ㅇ네 r/
Tween 애니메이션과 관련하여 각 도구에서 대체로 다음은 표준화되었습니다. (정말 죄송합니다.)
・이동(절대 위치/상대 위치)
· 확대
・회전
· Easing 지정 (Quad, Elastic, Back 등의 각종에 관해서 In, InOut, Out)
작성중은 Easing 조견표가 편리했으므로 붙여 둡니다.
htp // 에아신 gs. 네 t / 그럼
덧붙여서 iTween, BetweenAS3, cocos2d-x 각각의 쓰기 방법은 다음과 같이 되어 있습니다
(x:100, y:100을 QuadOut 여유로 0.2sec로 이동하는 경우)
[iTween]
iTween.MoveTo(gameObject, iTween.Hash("x", 100, "y", 100, "time", 0.2f, "easetype", iTween.EaseType.easeOutQuad));
[BetweenAS3]
BetweenAS3.to(frog, {x:100, y:100}, 0.2f, Quad.easeOut);
[cocos2d-x]
this->runAction(EaseQuadraticActionOut::create(MoveTo::create(Point(100, 100), 0.2f));
···
··· 그 외에 비해 Easing의 지정 방법이 조금 다른 것 같은··
그리고 같은 움직임을 같은 간격, 같은 Easing 지정으로 할 때에 아무것도 지정하지 않으면 안 되어 번거로움・・
그리고 미묘하게 cocos2d-x의 Easing 명칭이 긴 ··
그래서!
BetweenAS3라이크한 래퍼(Between 클래스) 만들었습니다↓
htps : // 기주 b. 코 m / 케이 d 로이 d / 아 d ゔ t2014
이런 가키타
this->runAction(Between::to(this, "x:100, y:100", 0.2f, Easing::QuadOut));
래퍼 없음의 경우와 있는 경우, 동시 재생으로 회전·확대를 더하면 각각 이하가 됩니다
[소로 쓴 경우]
this->runAction(Spawn::create(EaseQuadraticActionOut::create(MoveTo::create(Point(100, 100), 0.2f),
EaseQuadraticActionOut::create(RotateTo::create(30, 0.2f),
EaseQuadraticActionOut::create(ScaleTo::create(2.0f, 0.2f));
[래퍼 있음]
this->runAction(Between::to(this, "x:100, y:100, rot:30, scale:2", 0.2f, Easing::QuadOut));
(˚Д˚)
애니 애니메이션을 스크립트로 작성할 기회는 앞으로도 있을지 잘 모르겠지만
사쿠토 애니메이션을 쓰고 싶을 때 적합하면 사용하십시오.
(자신은 Flash를 cocos2d-x에 이식하기 위해 만들었습니다)
내일은 네이티브 제휴 이야기! 매우 기대됩니다!
Reference
이 문제에 관하여(cocos2d-x runAction 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keidroid/items/77fcb66ca03ffc3f6c00텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)