//一列に並んだボールがあるかチェックする void GameLayer::checksLinedBalls() { //画面をタップ不可とする _touchable = false; if (existsLinedBalls()) { //3個以上並んだボールの存在する場合 //連鎖カウントアップ _chainNumber++; //ボールの削除と生成 removeAndGenerateBalls(); //アニメーション後に再チェック auto delay = DelayTime::create(ONE_ACTION_TIME * (_maxRemovedNo + 1)); auto func = CallFunc::create(CC_CALLBACK_0(GameLayer::checksLinedBalls, this)); auto seq = Sequence::create(delay, func, nullptr); runAction(seq); } else { //タップを有効にする _touchable = true; } }
//一列に並んだボールがあるかチェックする void GameLayer::checksLinedBalls() { //画面をタップ不可とする _touchable = false; if (existsLinedBalls()) { //3個以上並んだボールの存在する場合 //連鎖カウントアップ _chainNumber++; //ボールの削除と生成 removeAndGenerateBalls(); //アニメーション後に再チェック auto delay = DelayTime::create(ONE_ACTION_TIME * (_maxRemovedNo + 1)); auto func = CallFunc::create(CC_CALLBACK_0(GameLayer::checksLinedBalls, this)); auto seq = Sequence::create(delay, func, nullptr); runAction(seq); } else { int chainNum = 0; int damage = 0; int healing = 0; std::set<int> attackers; //ダメージ・回復量の計算 calculateDamage(chainNum, healing, damage, attackers); //敵にダメージを与える int afterHp = _enemyData->getHp() - damage; if (damage > 0) //アタック処理 attackToEnemy(damage, attackers); if (healing > 0) //回復処理 healMember(healing); //敵にダメージを与えた後の処理を設定 CallFunc* func; if (afterHp <= 0) func = CallFunc::create(CC_CALLBACK_0(GameLayer::winAnimation, this)); else func = CallFunc::create(CC_CALLBACK_0(GameLayer::attackFromEnemy, this)); runAction(Sequence::create(DelayTime::create(0.5), func, nullptr)); } }