Exemplo n.º 1
0
//一列に並んだボールがあるかチェックする
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));
    }
}