[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--防御塔(七)之士兵

news/2024/4/20 18:25:29/

该章节主要介绍兵营塔中的士兵

上一章讨论到兵营塔,兵营塔的关键在于士兵,士兵的一切动作,包括升级都在士兵类中完成,代码部分在Soilder文件夹中。

士兵的类型多种多样,不光兵营塔有士兵,法师塔与炮塔在升级到4级后均可以产生出一种士兵


typedef enum{SoldierStateNone = 0, //无状态SoldierStateRun,//行走SoldierStateHit, //攻击SoldierStateDeath,//死亡SoldierStateWait,//寻找敌人SoldierStateSkill1,SoldierStateSkill2
}SoldierState;class BaseSoldier : public Sprite
{
public:CC_SYNTHESIZE(float, maxHp, MaxHp);CC_SYNTHESIZE(float, currHp, CurrHp);CC_SYNTHESIZE(float, force, Force);CC_SYNTHESIZE(float, armor, Armor);CC_SYNTHESIZE(float, hpPercentage, HpPercentage);CC_SYNTHESIZE(SoldierState, state, State);CC_SYNTHESIZE_READONLY(ProgressTimer*, hpBar, HpBar);CC_SYNTHESIZE(Point, location, Location);Sprite* baseSprite;virtual void runToLocation(Point point);virtual bool init();BaseMonster* nearestMonster;  virtual void updateSoldier(int level){};
protected:virtual void createAndSetHpBar();Sprite* hpBgSprite;virtual void lookingForMonsters(float dt);virtual void checkNearestMonster();virtual void attack();virtual void update(float dt){};virtual void runToDestination(Point destination,bool isAttacking){};SoldierState lastState;virtual void stopSoldierAnimation();void checkDirection(Point point);//false右边true左边virtual bool checkDirectionForMonster();float caculateTime(Point point);virtual void runToMonster();virtual void attackMonster(float dt){};int attackCount;//用于判断是否该释放技能了
};

士兵是一个自定义精灵,不同的士兵只是贴图不同,有的会根据attackCount攻击次数或者其他因素判断是否该释放技能

根据nearestMonster判断是否有敌人可以攻击,原理与防御塔相同,不同之处在于有一个走到敌人面前,并且与敌人搏斗的过程

当防御塔调用设置集结点方法后,调用每个士兵的runToLocation方法,使得士兵走到目的地,并且将状态设置成SoldierStateWait

最后添加一个定时器,相隔1秒调用lookingForMonsters检测附近敌人。

void BaseSoldier::runToLocation(Point point)
{if(getState()!=stateDeath){unscheduleAllCallbacks();scheduleUpdate();stopAllActions();if((point.x - this->getPositionX())>0){baseSprite->setFlippedX(false);//翻转,面向右边}else{baseSprite->setFlippedX(true);}setState(SoldierStateRun);runAction(Sequence::create(MoveTo::create(caculateTime(point),point),CallFuncN::create(CC_CALLBACK_0(BaseSoldier::setState, this,SoldierStateWait)),NULL));schedule(schedule_selector(BaseSoldier::lookingForMonsters), 1.0f,-1,caculateTime(point));}
}


当附近存在敌人并且敌人没有死亡,没有被其他士兵攻击(防止多个士兵攻击同一个敌人)时,将nearestMonster设置为该敌人,停止敌人动作,更改敌人状态为攻击,使得敌人执行攻击动画

if (monster->getAttackBySoldier() && distance < 50 && (!monster->getIsAttacking())) {nearestMonster = monster;nearestMonster->stopWalking();nearestMonster->setIsAttacking(true);break;
}
士兵的动画与敌人相同,都写在update(float dt)中,根据enum中的状态更新动画


若NearestMonster不为空,会执行attack,士兵会走到敌人面前,转身面向敌人,攻击(attackMonster(float dt)方法,dt可以看做是攻击速度,每隔dt敌人血量减少1次)

不同的士兵复写attackMonster方法,实行不同的攻击判断或者技能

如下

if(monsterCurrHp == 0){//若敌人死亡unschedule(schedule_selector(Assassin::attackMonster));nearestMonster->death();//更新敌人状态,执行四万动画if(this->getCurrHp()>0)runToLocation(location);//若士兵没死,走回地点}if(SoldierHp == 0){//若士兵死亡lastState = SoldierStateDeath;setState(SoldierStateDeath);//更新状态unscheduleAllCallbacks();//取消所有定时器stopAllActions();baseSprite->stopAllActions();//去下所有动画if(nearestMonster != NULL && nearestMonster->getCurrHp()>0){nearestMonster->restartWalking();//敌人胜利,敌人继续向前大步走nearestMonster->setIsAttacking(false);}baseSprite->runAction(Sequence::create//士兵死亡动画序列(CallFuncN::create(CC_CALLBACK_0(Assassin::setState, this,SoldierStateDeath)),Animate::create(AnimationCache::getInstance()->getAnimation("Assassin_dead")),FadeOut::create(1.0f),NULL));	
}

需要升级的士兵是基础士兵塔的士兵,即更新动画序列的frame中的图片前缀名即可

baseSprite->setSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName(String::createWithFormat("soldier_lvl%d_0001.png",level)->getCString()));

士兵原理上即一个可以行走的防御塔:可以让敌人停止行走-》让敌人执行攻击动画-》相隔一定时间两者同时掉血-》活下来的继续执行之前的动画

根据这个思路实现可以实现不同的士兵,仅仅是动画贴图不同,稍复杂的就是图中的坦克车,比普通士兵多一个导弹,相比士兵而言更像是防御塔而已




http://www.ppmy.cn/news/624536.html

相关文章

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--地图(一)

上面3张图是完成后的效果图 游戏已完成&#xff0c;除了英雄外&#xff0c;基本还原了90%的游戏内容&#xff0c;一共13关&#xff0c;20种防御塔&#xff0c;30种敌人&#xff0c;如上图&#xff0c;以假乱真吧 下面从地图模块起介绍我的方法&#xff0c;如有更好的方法&…

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--防御塔(二)之初级箭塔

该章节主要介绍如何制作初级箭塔 首先我们先观察下这个游戏的箭塔 这个游戏的箭塔都是拥有两个弓箭手。以初级塔为例&#xff0c;左右两边分别有两个弓箭手&#xff0c;可以攻击不同的目标&#xff0c;并且同时只有一个弓箭手在攻击。根据这个特性我们写一个BaseArrowTower cl…

基地保留节目--塔防游戏

版权声明:本文由神州数码云基地团队整理撰写&#xff0c;若转载请注明出处。 7月的某一天晚上9点&#xff0c;2021年刚毕业的尹煊博在公司里紧锁着眉梢&#xff0c;一边敲击着键盘一边自言自语的囔囔着&#xff1a;“为啥我的兵就出不来呢&#xff1f;”这天应该是他入职还没满…

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--地图(二)

接上文&#xff0c;添加地图&#xff0c;在地图层直接添加即可&#xff0c;我是将AnchorPoint设置在&#xff08;0,0)&#xff0c;方便计算坐标 mapSprite Sprite::createWithSpriteFrameName(String::createWithFormat("Stage_%d.png",level1)->getCString()); …

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--子弹类(一)

该章节主要介绍防御塔的子弹 有了防御塔没有子弹类是不能攻击敌人的&#xff0c;所以接着来讨论子弹&#xff0c;新建一个子弹基类Bullet.h class Bullet : public Sprite { public:Bullet();~Bullet();virtual bool init();CREATE_FUNC(Bullet);protected:CC_SYNTHESIZE(int,…

好玩的Java塔防游戏,比较火的塔防手游!塔防游戏排行榜推荐

十年之前&#xff0c;我在同学的诺基亚上玩过一款非常好玩的JAVA塔防手游&#xff0c;具体的名字虽然忘了&#xff0c;但当时连续通宵好几个晚上对其喜爱的热情至今也无法忘记。回到现在&#xff0c;手游也从之前的单机到现在的多人联网&#xff0c;玩法上更是增加了许多&#…

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--其他

最后一章&#xff0c;讲一下其他零碎的地方。 防御塔方面&#xff0c;还有炮塔的两个高级塔&#xff0c;例如地震塔&#xff0c;机器人塔。地震塔就是周围敌人全部减少血量&#xff0c;机器人塔就是一个士兵类&#xff0c;炮塔升级成士兵类&#xff0c;实现方式和士兵类似。 法…

打外星生物的塔防java_塔防游戏有很多,这一款防外星人的游戏,你玩过没

拥有各自风格特色的多种防御塔&#xff0c;游戏包括精美界面设置。玩的时候他音效有种搞怪的感觉。好多种防御塔捍卫萝卜&#xff0c;不同防御塔有不同的威力和功能&#xff0c;可以收集道具&#xff0c;还可以以养外星人达到更多的成果。就我而言&#xff0c;这个游戏就给我带…

04 塔防底板布局 (和儿子一起编游戏-塔防系列 )

4.1 基本概念 从简单的来讲&#xff0c;塔防的底板由供坏蛋行走的路线&#xff0c;供安放炮塔的底座&#xff0c;起始点和终止点组成&#xff0c;成品的效果是这样的&#xff1a; 要做成上面说的底板&#xff0c;就要涉及到Unity3D Prefab&#xff0c;这是一个预制件概念&…

《王国之泪》掉帧严重怎么破?超频Switch教程来了,稳定30帧运行

萧箫 发自 凹非寺量子位 | 公众号 QbitAI 《塞尔达传说王国之泪》简直爆火&#xff0c;相比之下Switch有点“带不动”它了。 这不&#xff0c;就在游戏发售后&#xff0c;不少玩家发现它最大的问题是掉帧严重&#xff0c;尤其是使用“究极手”在海拉鲁搞事时&#xff0c;能直接…

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--游戏开始界面

修改AppDelegate中内容&#xff0c;将setDesignResolutionSize中改为 <span style"font-size:14px;">(960, 640, ResolutionPolicy::FIXED_HEIGHT)</span> 保持传入的设计分辨率高度不变&#xff0c;根据屏幕分辨率修正设计分辨率的宽度 通过&#xff1a…

塔防类游戏关卡分析

转自&#xff1a;http://blog.csdn.net/u014779452/article/details/48471669 隐约还记得最开始接触的塔防游戏是在《魔兽争霸3》里的一个塔防地图&#xff0c;一个田字型的地图&#xff0c;四周一波一波的来怪物&#xff0c;而玩家需要在路边建塔消灭进攻的怪物&#xff0c;阻…

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--简介+代码+资源

学校实训项目需要用cocos2dx做一款塔防游戏&#xff0c;因为时间与制图技术、创意原因无法进行原创&#xff0c;碰巧找到了皇家守卫军这款游戏的图片资源&#xff0c;决定用cocos2dx来重现这款经典塔防游戏。 本项目已完成3分之1&#xff0c;初学cocos2dx1个月&#xff0c;时间…

详解P431 塔防

题目 说明 gsy 最近在玩一个塔防游戏&#xff0c;但是这次她控制的是迷宫中的怪兽而非防御塔建造者 游戏的地图是一个 n * m 的矩阵&#xff0c;起点在 (1,1) &#xff0c;终点在 (n,m) &#xff0c;gsy 每次可以选择上下左右四个方向移动 1 步 这个地图上有很多的防御塔&#…

塔防(cover)

塔防&#xff08;cover&#xff09;Atcoder/CF的某道题 题目背景 在某个塔防游戏中&#xff0c;有一种防御塔&#xff0c;可以攻击到上下左右四个方向以及自身位置的敌人。 题目描述 塔防游戏的一个关卡地图可以看作一个 R C R\times C RC的矩阵&#xff0c;也就是 R R R行&am…

宝石塔防的贴吧地址:

宝石争霸吧 http://tieba.baidu.com/f?kw%B1%A6%CA%AF%D5%F9%B0%D4

宝石塔防:如果还有人过不去1337,俺来发个详细点儿的攻略吧

游戏版本建议1.17,贴吧里有破解版,因为这个版本有个让所有怪一次性出完的快捷键很好用 前期,100级以内,这个升级没什么难度,随便找一关,选无尽模式,不论你怎么造,尽量坚持,几十或100来波左右死就死掉了,然后经验一涨一大截,总结下来就是无尽模式巨型怪,你也可以把巨怪血弄高一…

宝石塔防攻略

宝石塔防小游戏攻略 (Gem Craft Game Guide) 作者&#xff1a;神马游戏原创 类型&#xff1a;策略 专题&#xff1a;经典 宝石 塔防 2011-04-18 宝石塔防小游戏攻略1&#xff1a; 五、最后一关BOSS攻略。必须打两轮。关键点&#xff1a;&#xff08;1&#xff09;后期…

宝石塔防3心得

心得   把重要的技能学满级后 多的技能点升级魔法上限 这样扩充魔法池的效果更好 更快   参考楼下的陷阱流 在出怪口放一个陷进 宝石用多重和吸魔双色合成宝石 周围尽可能的放满辅助塔 也放多重和吸魔的双色合成宝石&#xff08;初始魔法不多 辅助塔里宝石放小点的也行 主…

探索Python条件语句的奇妙世界:解密逻辑与控制流

文章目录 前言if 语句if ... else ...多重判断&#xff08;if ... elif ... else...&#xff09;if 嵌套猜数字游戏三目运算符 前言 Python的条件语句用来根据特定的条件决定程序的执行流程。它允许程序根据条件的真假执行不同的代码块&#xff0c;从而实现不同情况下的不同操…