天天看點

Cocos3.4 橫版遊戲制作-《KillBear》-攻擊判定+傷害飄血開發環境代碼效果效果效果結語

轉載時請務必以超連結形式标明文章,原始出處 。

資源為網上尋找的,僅研究學習用,若是侵犯版權請通知本人整改。

上一篇: Cocos3.4 橫版遊戲制作-《KillBear》-添加敵人+簡單AI實作

上篇在遊戲層加入了敵人,并實作了簡單的AI

本篇将在前面的基礎上使攻擊有效,建立攻擊判定, 當Hero攻擊敵人時會出現傷害值顯示

開發環境

win64 : vs2010

Cocos2d-x v3.4Final

TexturePackerGUI

MapEdit

代碼

Role

Hero

我們直接在.cpp和.h中加入傳回判定,

  • .h
void Hero::attackCallBackAction(Node* pSender);//普通攻擊回調
    void Hero::FontsCallBackAction(Node* pSender);//數字淡出回調
    void Hero::damageDisplay(int number,Vec2 point);//産生傷害數字動畫
           
  • .cpp
void Hero::attackCallBackAction(Node* pSender)
{//普通攻擊回調
    __Array* pEnemies = global->enemies ;
    Ref *enemyObj = NULL;
    //周遊所有怪物 
    CCARRAY_FOREACH(pEnemies, enemyObj)
    {
        Enemy *pEnemy = (Enemy*)enemyObj;
        if(fabsf(this->getPosition().y - pEnemy->getPosition().y) < )
        {
            Rect attackReck = m_hitBox.actual;//英雄攻擊區域
            Rect hurtReck = pEnemy->getBodyBox().actual;;//怪物受傷區域
            if(attackReck.intersectsRect(hurtReck))
            {
                pEnemy->setAllowMove(false);
                pEnemy->runHurtAction();
                int damage = random(this->getDamageStrenth()*,this->getDamageStrenth()*);
                pEnemy->setCurtLifeValue(pEnemy->getCurtLifeValue() - damage);
                if(pEnemy->getCurtLifeValue() <= )
                {
                    pEnemy->runDeadAction();
                    pEnemy->setBodyBox(createBoundingBox(Vec2::ZERO, Size::ZERO));
                }
            }
        }
    }
    //this->runIdleAction();
}
           

然後不要忘了在上方攻擊序列建立的時候加入判定

//普通攻擊A,分出招和收招,期間夾雜攻擊判定.自己可以通過調節fps控制出招速度之類的
        Animation *attackAnima1 = this->createAttackAnimation("boy_attack_00_%02d.png", , , );
        Animation *attackAnima2 = this->createAttackAnimation("boy_attack_00_%02d.png", , , );
        this->setNomalAttackA(Sequence::create(
            Animate::create(attackAnima1), 
            CallFuncN::create(CC_CALLBACK_1(Hero::attackCallBackAction,this)),
            Animate::create(attackAnima2),
            Role::createIdleCallbackFunc(),
            NULL));
           

效果

Cocos3.4 橫版遊戲制作-《KillBear》-攻擊判定+傷害飄血開發環境代碼效果效果效果結語
Cocos3.4 橫版遊戲制作-《KillBear》-攻擊判定+傷害飄血開發環境代碼效果效果效果結語

Enemy

同樣在敵人加入攻擊判定.

就不貼.h了,同樣注意在動作建立的時候加入攻擊判定

void Enemy::attackCallBackAction(Node* pSender)
{
    Hero* t_hero = global->hero;
    Rect attackReck = m_hitBox.actual;//怪物攻擊區域
    Rect hurtReck = t_hero->getBodyBox().actual;//英雄受傷區域
    if(attackReck.intersectsRect(hurtReck))
    {
        t_hero->setAllowMove(false);
        int damage = this->getDamageStrenth();
        t_hero->runHurtAction();
        t_hero->setCurtLifeValue(t_hero->getCurtLifeValue() - damage);
    }
    if(t_hero->getCurtLifeValue() <= )
    {
        t_hero->runDeadAction();
        t_hero->setBodyBox(createBoundingBox(Vec2::ZERO, Size::ZERO));
    }
}
           

效果

Cocos3.4 橫版遊戲制作-《KillBear》-攻擊判定+傷害飄血開發環境代碼效果效果效果結語

我們在Hero攻擊回調一個傷害顯示函數,顯示傷害值,過會兒自己消失掉

void Hero::FontsCallBackAction(Node* pSender)
{
    //數字淡出回調
    global->gameLayer->removeChild(pSender);
}
void Hero::damageDisplay(int number,Vec2 point)
{
    //産生數字動畫
    auto atLabel = Label::create();
    //char ch[100]={0};
    //sprintf(ch,"-%d",number);
    atLabel->setString(__String::createWithFormat("-%d",number)->getCString());
    atLabel->setSystemFontSize();
    atLabel->setColor(Color3B(,,));
    atLabel->setPosition(point);
    global->gameLayer->addChild(atLabel,);
    FiniteTimeAction * callFuncN = CallFuncN::create(atLabel, callfuncN_selector(Hero::FontsCallBackAction));
    FiniteTimeAction *sequence = Sequence::create(
        //FadeIn::create(1.5f),
        ScaleTo::create(f,f),
        MoveBy::create(f,Vec2(,)),
        FadeOut::create(f),
        callFuncN,
        NULL); 
    atLabel->runAction(sequence);
}
           

被忘了在上面的attackCallBackAction中加入

效果

Cocos3.4 橫版遊戲制作-《KillBear》-攻擊判定+傷害飄血開發環境代碼效果效果效果結語

結語

攻擊判定框在前面在剛建立的時候已經設定了

對于此類遊戲來說,最複雜也是最困難的就是各種判定了.

本Demo隻是一個示範效果,是以全部的攻擊判定隻用了一個判定框

最好的方式是,單獨給每一種動作,建立受擊和攻擊判定.是一個相當繁瑣的工作.

對于攻擊動作來說,在動作進行當中添加判定比剛開始或者是結束後添加更加的真實.

每一個動作也可以放多個攻擊判定實作多段攻擊,效果如擊飛(據攻擊方向相反出移動一定距離),上挑(Y軸移動一定距離)

下一篇,将添加一個有冷卻的按鈕實作Hero技能攻擊