コード例 #1
0
void HeroPet::petFollowHero(cocos2d::Vec2 pos)
{
    auto winSize = Director::getInstance()->getWinSize();
    if (pos.x + 60 + getPet()->getContentSize().width < winSize.width)
    {
        getPet()->setPosition(Vec2(pos.x + 60 + getPet()->getContentSize().width, pos.y));
    }
    else
    {
        getPet()->setPosition(Vec2(pos.x - 60 - getPet()->getContentSize().width, pos.y));
    }
}
コード例 #2
0
void HeroPet::petAnimation()
{
    char buff[16];
    Vector<SpriteFrame *> frames;
    for (auto i = 1; i<=6; i++)
    {
        sprintf(buff, "hero_0%d.png", i);
        frames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName(buff));
    }
    
    Animation *pAnimation = Animation::createWithSpriteFrames(frames, 0.1f);
    getPet()->runAction(RepeatForever::create(Animate::create(pAnimation)));
}
コード例 #3
0
ファイル: StateSkill.cpp プロジェクト: hyizsg/HM_3
void StateSkill::execute(StateBase* parent)
{
    BatCmdSkill* cmd = getCmd();
    auto battleInfo = getBattleInfo();
    
    auto ps = battleInfo->getPet(cmd->petUid);
    auto skill = ps->getSkillInfo(cmd->sid);
    ps->isActioned = true;
    
    if (ps->isDead || !ps->isBating) {
        return exitState();
    }
    
    if (ps->isUnableAction) {
        return exitState();
    }
    
    // 技能计算开始
    // 生成技能运算公共数据
    shared_ptr<FireSkill> fireInfo(new FireSkill);
    assign(fireInfo.get(), skill, skill->keySkill, 0);
    fireInfo->parent = nullptr;
    fireInfo->origin = battleInfo->topSkill() != nullptr ? battleInfo->topSkill().get() : nullptr;
    fireInfo->targets = fixedTargets(cmd->params, fireInfo.get(), skill->belongs.owner, skill->keySkill->target, 0);
    
    if (fireInfo->targets.size() == 0) {
        return exitState();
    }
    
    // 压入栈
    battleInfo->pushSkill(fireInfo);
    
    // 行动开始,可修改技能及目标
    battleInfo->changeStage(Stage::ActionBegin);
    skill = fireInfo->skill; // 技能可能已被修改
    
    // 技能释放
    BatSeqSkill* s = new BatSeqSkill;
    s->petUid = fireInfo->firer;
    s->sid = fireInfo->skill->sid;
    s->params = fireInfo->targets;
    battleInfo->pushSeq(shared_ptr<ISeq>(s));
    
    // 以次计算每个目标
//    for (int i=0; i<fireInfo->targets.size(); i++) {
//        int dstuid = fireInfo->targets[i];
//        
//        assign(fireInfo.get(), skill, skill->keySkill, dstuid);
//        createEffect(skill->keySkill->subType, skill->keySkill->subId)->execute();
//        
//        if (!fireInfo->curr.isHit || fireInfo->isCancel) {
//            continue;
//        }
//        
//        // 计算次效果
//        for (auto subsk : skill->keySkill->subs) {
//            shared_ptr<FireInfo> subfireInfo(new FireInfo);
//            subfireInfo->origin = fireInfo->origin;
//            subfireInfo->parent = fireInfo.get();
//            fireInfo->children.push_back(subfireInfo);
//            
//            assign(subfireInfo.get(), skill, subsk.get(), dstuid);
//            pushSkill(subfireInfo);
//            
//            createEffect(subsk->subType, subsk->subId)->execute();
//            
//            popSkill();
//        }
//        
//        fireInfo->children.clear();
//    }
//    
//    checkDead(fireInfo->targets);
//    
//    ps->onActioned(true);
//    
//    fireInfo->effect.cost.pp = 1;
//    changeStage(Stage::ActionEnd);
//    
//    if (keySkill->ppNum != -1) {
//        
//        BatSeqPP* pp = new BatSeqPP;
//        pp->petUid = fireInfo->firer;
//        pp->sid = fireInfo->sid;
//        pp->pp = fireInfo->effect.cost.pp;
//        pushSeq(BatSeqPtr(pp));
//    }
//    
//    popSkill();
    
    exitState();
}