基于cocos2dx 3.0的卡牌游戏战斗环节探究二

好了,让我们继续;


在上一篇的onAttack方法内,我们看到了这两个定时操作:

   

            if(_relation==good){

                this->schedule(schedule_selector(Role::attackFromPlayer),2);

            }

            else{

                this->schedule(schedule_selector(Role::attackFromMonster),3);}

没错,这就是角色的攻击动作,这里写的动作非常简单,可以分解为:


auto rotateLeft=RotateTo::create(0.1, -30);

    auto rotateRight=RotateTo::create(0.1,30);

    auto rotateBack=RotateTo::create(0.1,0);

    

    auto attackCall=CallFunc::create([&](){

        if(_relation==good){

            CCNotificationCenter::sharedNotificationCenter()->postNotification("player give a hit",NULL);

            

        }

    });

  

auto seq=Sequence::create(rotateLeft,rotateRight,rotateBack,attackCall,NULL);

        this->runAction(seq);


   每次攻击出去的动作做出来后,使用回调发出一个指令给到GameLayer,由GameLayer通知对手类,更改对方的状态:

_monster->_fsm->doEvent("doBeHit");

GameLayer就担任调度中心的任务。

 

   下面是补充一些细节:

(1)血量条的扣减:

onBeHit内,刷新血量:

 _health=_health-400;

                _blood->setPercentage((_health/1000)*100);

如果血量为0,判定角色死亡,否则自动攻击:

   

                    if(_health>0){

                        

                        this->_fsm->doEvent("doAttack");

                        

                    }else{

                        

                        log("signa, h1");

                        _fsm->doEvent("doDead");

                    }


(2)死亡的消息(汗!)

onDead方法内,角色通知调度层GameLayer,由GameLayer停止这个场景(这里做了简单处理,将另一方也置为dead状态,停止动作,汗)

auto onDead=[&](){

        this->unscheduleAllSelectors();

        this->stopAllActions();

        log("i am dead");

        CCNotificationCenter::sharedNotificationCenter()->postNotification("someone is killed",NULL);

    };

void GameLayer::func3(CCObject* pSender){

    

    if(_player->_fsm->getStatus()!="dead"){

        

        _player->_fsm->doEvent("doDead");

    }

    

    

}

好的,更多细节就请看代码吧

 https://github.com/frank1982/rpg-combat-scene-demo-of-cocos2dx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值