最近プログラムを始めた初心者という前提でお願いいたします。
個人的にcocos2d-xを使ってC++でゲームを作っています。
キャラクターのアニメーション遷移についてわからないことがあります。
アニメーションをanimationCahceに格納してアニメーションを行っております。
移動したときに、歩くアニメーションをした後に待機状態の画像に切り替えたいです。
現在、
// 移動処理
AnimationCache *pAnimationCache = CCAnimationCache::getInstance();
Sprite pPlayer = (Sprite)this->getChildByTag(1);
pPlayer->stopActionByTag(100);
auto moveSpeed = 300.0f;
auto playerPos = pPlayer->getPosition();
auto globalTouchPoint = this->convertToNodeSpace(pTouch->getLocation());
auto distance = playerPos.getDistance(globalTouchPoint);
auto moveTime = abs(distance) / moveSpeed;
auto moveTo = MoveTo::create(moveTime, globalTouchPoint);
moveTo->setTag(100);
pPlayer->runAction(moveTo);
// キャラアニメーションの遷移 Animation *pAnimationWalk; Animation *pAnimationIdle; RepeatForever *pActionWalk; RepeatForever *pActionIdle; pPlayer->stopActionByTag(200); if (abs(globalTouchPoint.y - playerPos.y) > abs(globalTouchPoint.x - playerPos.x)) { if (playerPos.y > globalTouchPoint.y) { pAnimationWalk = pAnimationCache->animationByName("FRONT"); pAnimationIdle = pAnimationCache->animationByName("FRONT_IDLE"); } else { pAnimationWalk = pAnimationCache->animationByName("BACK"); pAnimationIdle = pAnimationCache->animationByName("BACK_IDLE"); } } else { if (playerPos.x > globalTouchPoint.x) { pAnimationWalk = pAnimationCache->animationByName("LEFT"); pAnimationIdle = pAnimationCache->animationByName("LEFT_IDLE"); } else { pAnimationWalk = pAnimationCache->animationByName("RIGHT"); pAnimationIdle = pAnimationCache->animationByName("RIGHT_IDLE"); } } pActionWalk = CCRepeatForever::create(CCAnimate::create(pAnimationWalk)); pActionIdle = CCRepeatForever::create(CCAnimate::create(pAnimationIdle)); auto actionWalk = pPlayer->runAction(pActionWalk); pActionWalk->setTag(200);
となっていて、その次に待機状態の
// 待機状態 this->schedule([=](float dt) { auto playerPosUpd = pPlayer->getPosition(); if (playerPosUpd == globalTouchPoint) { CCLOG("移動終了"); pPlayer->stopActionByTag(200); pPlayer->runAction(pActionIdle); pActionIdle->setTag(200); this->unschedule("ActionCompleteCheck"); } }, "ActionCompleteCheck");
を追加しましたが、思うような動きになってくれません。
1回目のタッチだと問題ありませんが、
移動中にタッチを行うと、更新処理が終わらなくなってしまうようです。
フラグを立てたりするのかなと考えたりもしましたが、
どなたかご教授よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/18 11:26
2017/07/20 02:14
2017/07/20 02:27
2017/07/20 02:29
2017/07/20 03:37