void MainScene::animateHitPiece(Side obstacleSide) { Piece* flyingPiece = dynamic_cast<Piece*>(CSLoader::createNode("Piece.csb")); ActionTimeline* pieceTimeline = CSLoader::createTimeline("Piece.csb"); flyingPiece->setObstacleSide(obstacleSide); flyingPiece->setPosition(this->flyingPiecePosition); this->addChild(flyingPiece); this->runAction(pieceTimeline); switch (this->character->getSide()) { case Side::Left: pieceTimeline->play("moveRight", false); break; case Side::Right: pieceTimeline->play("moveLeft", false); break; default: break; } // on the last frame of the animation, remove the piece from the scene pieceTimeline->setLastFrameCallFunc([this, &flyingPiece]() { this->removeChild(flyingPiece); }); }
void ScenePlot::createSkin() { auto skin = CSLoader::createNode(RES_MODULES_PLOT_SCENE_PLOT_CSB); addChild(skin); auto layoutBg = (Layout *)skin->getChildByName("layoutBg"); layoutBg->addTouchEventListener([=](Ref *ref, Widget::TouchEventType type) { if (type == Widget::TouchEventType::ENDED) { ActionTimeline *actionTimeline = (ActionTimeline *)skin->getActionByTag(skin->getTag()); if (actionTimeline == nullptr) { actionTimeline = CSLoader::createTimeline(RES_MODULES_PLOT_SCENE_PLOT_CSB); skin->runAction(actionTimeline); } auto animationName = "animation" + Value(_countClickCurr).asString(); auto isAnimationInfoExists = actionTimeline->IsAnimationInfoExists(animationName); if (!isAnimationInfoExists) { ManagerData::getInstance()->setSaveFileExist(); ManagerUI::getInstance()->replaceScene(TypeScene::MAIN); return; } if (_isPlaying) { return; } _isPlaying = true; actionTimeline->play(animationName, false); actionTimeline->setLastFrameCallFunc([=]() { _isPlaying = false; }); _countClickCurr++; } }); }