Cocos3.4 横版游戏制作-《KillBear》-攻击判定+伤害飘血

Cocos3.4 横版游戏制作-《KillBear》-攻击判定+伤害飘血,第1张

概述转载时请务必以超链接形式标明文章,原始出处 。 资源为网上寻找的,仅研究学习用,若是侵犯版权请通知本人整改。 上一篇: Cocos3.4 横版游戏制作-《KillBear》-添加敌人+简单AI实现 上篇在游戏层加入了敌人,并实现了简单的AI 本篇将在前面的基础上使攻击有效,创建攻击判定, 当Hero攻击敌人时会出现伤害值显示 开发环境 win64 : vs2010 Cocos2d-x v3.4Fi

转载时请务必以超链接形式标明文章,原始出处 。
资源为网上寻找的,仅研究学习用,若是侵犯版权请通知本人整改。

上一篇: 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) < 20)        {            Rect attackReck = m_hitBox.actual;//英雄攻击区域            Rect hurtReck = pEnemy->getbodyBox().actual;;//怪物受伤区域            if(attackReck.intersectsRect(hurtReck))            {                pEnemy->setAllowMove(false);                pEnemy->runHurtAction();                int damage = random(this->getdamageStrenth()*0.7,this->getdamageStrenth()*1.3);                pEnemy->setCurtlifeValue(pEnemy->getCurtlifeValue() - damage);                if(pEnemy->getCurtlifeValue() <= 0)                {                    pEnemy->runDeadAction();                    pEnemy->setbodyBox(createBoundingBox(Vec2::ZERO,Size::ZERO));                }            }        }    }    //this->runIDleAction();}

然后不要忘了在上方攻击序列创建的时候加入判定

//普通攻击A,分出招和收招,期间夹杂攻击判定.自己可以通过调节fps控制出招速度之类的        Animation *attackAnima1 = this->createAttackAnimation("boy_attack_00_%02d.png",0,4,10);        Animation *attackAnima2 = this->createAttackAnimation("boy_attack_00_%02d.png",8,15);        this->setNomalAttackA(Sequence::create(            Animate::create(attackAnima1),CallFuncN::create(CC_CALLBACK_1(Hero::attackCallBackAction,this)),Animate::create(attackAnima2),Role::createIDleCallbackFunc(),NulL));
效果


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() <= 0)    {        t_hero->runDeadAction();        t_hero->setbodyBox(createBoundingBox(Vec2::ZERO,Size::ZERO));    }}
效果

我们在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(18);    atLabel->setcolor(color3B(0,128));    atLabel->setposition(point);    global->gameLayer->addChild(atLabel,200);    FiniteTimeAction * callFuncN = CallFuncN::create(atLabel,callfuncN_selector(Hero::FontsCallBackAction));    FiniteTimeAction *sequence = Sequence::create(        //FadeIn::create(1.5f),        Scaleto::create(0.2f,1.3f),MoveBy::create(0.2f,Vec2(0,20)),FadeOut::create(0.5f),callFuncN,NulL);     atLabel->runAction(sequence);}

被忘了在上面的attackCallBackAction中加入

damagedisplay(damage,pEnemy->getbodyBox().actual.origin);
效果 结语

攻击判定框在前面在刚创建的时候已经设定了
对于此类游戏来说,最复杂也是最困难的就是各种判定了.

本Demo只是一个演示效果,所以全部的攻击判定只用了一个判定框
最好的方式是,单独给每一种动作,创建受击和攻击判定.是一个相当繁琐的工作.
对于攻击动作来说,在动作进行当中添加判定比刚开始或者是结束后添加更加的真实.
每一个动作也可以放多个攻击判定实现多段攻击,效果如击飞(据攻击方向相反出移动一定距离),上挑(Y轴移动一定距离)

下一篇,将添加一个有冷却的按钮实现Hero技能攻击

总结

以上是内存溢出为你收集整理的Cocos3.4 横版游戏制作-《KillBear》-攻击判定+伤害飘血全部内容,希望文章能够帮你解决Cocos3.4 横版游戏制作-《KillBear》-攻击判定+伤害飘血所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1040214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存