void GameLevel::dieImpl() { mDieFlag = false; pause(); // Camera effect. getGameLayer()->getBlockRoot()->runAction(CameraShake::create(0.3f, 10)); auto hero = getHero(); // Particle effect. ParticleSystem *ps = ParticleSystemQuad::create(DIE_FX_NAME); ParticleBatchNode *batch = ParticleBatchNode::createWithTexture(ps->getTexture()); batch->addChild(ps); batch->setPosition(hero->getRenderer()->getPosition()); batch->setCameraMask((unsigned short) CameraFlag::USER2); mGameLayer->getBlockRoot()->addChild(batch, ZORDER_DIE_FX, DIE_FX_TAG); hero->getRenderer()->getNode()->runAction(Sequence::create(ScaleTo::create(0.2, 0.1, 0.1), CallFunc::create([this] { getHero()->getRenderer()->setVisible(false); }), nullptr)); mGameLayer->runAction(Sequence::create(DelayTime::create(0.5), CallFunc::create([this] { enableGame(false); enableGame(true); }), nullptr)); }
void GameScene::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event) { Vec2 size = Director::getInstance()->getVisibleSize(); auto HandAnimation = Animation::createWithSpriteFrames(mHandAnimations, 0.05); auto HandAnimate = Animate::create(HandAnimation); mHandSprite->runAction(HandAnimate); if (mKnife == nullptr) return; CCLOG ("%f\n", mKnife->getKnife()->getPositionY()); if (mKnife->isInCutterEdge()) { // 失败脸部表情 auto FaceAnimation = Animation::createWithSpriteFrames(mFaceAnimationFail, 1); auto FaceAnimate = Animate::create(FaceAnimation); mFaceSprite->runAction(FaceAnimate); MusicButton::getInstance()->playCatchCutterEdge(); // 停止刀子 mKnife->getKnife()->getPhysicsBody()->setVelocity(Vec2(0, 0)); mKnife->getKnife()->getPhysicsBody()->setGravityEnable(false); // 流血效果 ParticleSystem* BloodPar = ParticleSystemQuad::create("blood.plist"); BloodPar->retain(); ParticleBatchNode* BloodNode = ParticleBatchNode::createWithTexture(BloodPar->getTexture()); BloodNode->addChild(BloodPar); BloodNode->setAnchorPoint(Vec2::ZERO); BloodNode->setPosition(Vec2(250, 300)); addChild(BloodNode, 10); BloodPar->release(); // NG scheduleOnce(schedule_selector(GameScene::gameOver), 1); } else if (mKnife->isInHilt()) { // 成功脸部表情 auto FaceAnimation = Animation::createWithSpriteFrames(mFaceAnimationSucc, 0.5); auto FaceAnimate = Animate::create(FaceAnimation); mFaceSprite->runAction(FaceAnimate); MusicButton::getInstance()->playCatchHilt(); // 刀子动作 mKnife->getKnife()->getPhysicsBody()->setVelocity(Vec2(0, 0)); mKnife->getKnife()->getPhysicsBody()->setGravityEnable(false); auto KnifeMove = MoveTo::create(0.3, Vec2(Vec2(size.x-140, size.y-82))); auto KnifeScale = ScaleTo::create(0.4, 0.1); auto KnifeSpa = Spawn::create(KnifeMove, KnifeScale, NULL); mKnife->getKnife()->runAction(KnifeSpa); scheduleOnce(schedule_selector(GameScene::gotKnife), 0.5); } else { // Miss表情 auto FaceAnimation = Animation::createWithSpriteFrames(mFaceAnimationMiss, 0.2); auto FaceAnimate = Animate::create(FaceAnimation); mFaceSprite->runAction(FaceAnimate); } }