cocos2d-x 2x 菜鸟编塔防 02 添加敌人
下面我们呢来编写一个敌人类,这个类目前主要有如下几个功能:
- 实现各个方向的帧动画切换
- 从起点走到终点
- 可改变行走速度
- 到达终点后消失
是不是觉得功能有点少啊,还是那句话,以后慢慢添加。
写在最前面:
首先说说怎么实现上面说的这几个功能,流程如下:
第一步.首先我是定义了几个可能用到的私有变量
- //敌人图片
- CCSprite * _creep;
- //怪物血量
- int _creepHP;
- //怪物移动速度,每秒多少像素
- float _CreepMoveSpeed;
- //当前路点序号
- int _wayPointNow;
- //当前方向
- int _nowDirection;
- //creep是否正在移动
- bool _moving;
这几个变量的用途很简单,大部分都能看懂,说说几个用途很乱的吧(新手没办法)
- //当前路点序号
- int _wayPointNow;
上面这个就是保存了敌人行走的路点序号,就是敌人刚刚走过的路点,比如:敌人走过了a路点,正向着b路点前进,_waypoint就是路点A 。这样说明白了吧。(路点我是为了测试自己瞎写的)
这个路点的序号作用是什么呢?
塔防吗,就要有敌人按照路径走到一个终点,在这走的过程中会有许多转弯的地方,敌人有一个行走的帧动画,在变化方向的时候,我们也要让动画做相应的改变,这样看着才有意思。我是这样让敌人切换转向的:通过比对当前路点和下一个路点得出相对的方向,也就是一个坐标系中a,b两点,b点在a点的上面还是下面,左还是右。得到这个方向之后我们就可以写个函数改变敌人的动画了。
第二步. 初始化一些参数
- //--------------对敌人进行初始化-------------------
- //设置移动速度
- _CreepMoveSpeed = 100;
- //设置血量
- _creepHP = 100;
- //初始化路点序列
- _wayPointNow = 0;
- //初始化当前方向
- _nowDirection= getDirection();
- //初始化精灵
- //_creep = CCSprite::create("CloseNormal.png");
- //初始化是否正在移动
- _moving = false;
- _creep = CCSprite::create();
- _creep->setTag(kSprite);
- _creep->setPosition(sHWorld->_wayPoint->getControlPointAtIndex(_wayPointNow));
- setDirectionAnimation(getDirection());
- this->addChild(_creep);
第17行的setDirectionAnimation就是一个改变动画方向的函数,其参数就是一个关于放心的枚举,getDirection就是计算方向.
第三步:永远运行的游戏逻辑
在初始化init函数最后加上
- schedule(schedule_selector(mC_Creep::gamelogic));
让每帧都调用gamelogic函数
- void mC_Creep::gamelogic( float dt )
- {
- /* CCLOG("xy is %f %f",x,y);*/
- //如果不移动则运行
- if(!_moving) creepMove();
- if (_creepHP == 0 )
- {
- this->stopAllActions();
- this->unscheduleAllSelectors();
- sHWorld->_creepGroup->removeObject(this,true);
- this->removeChildByTag(kSprite,true);
- }
- }
首先判断,如果不是在移动就会判断一下,当HP为0 的时候(被敌人杀死,或者走到了终点我就设置HP 为0),我就做了一些释放,SHworld是用来保存所有的敌人的一个CCArray,作用以后再说。
看看CreepMove函数有什么东西:
- void mC_Creep::creepMove()
- {
- //1是computeFinishTime()计算直线行走的时间
- //2.是下一个露点的坐标
- CCActionInterval * t_Action = CCMoveTo::create(
- computeFinishTime(),//1
- sHWorld->_wayPoint->getControlPointAtIndex(_wayPointNow+1)//2
- );
- //修改标签,以方便获得
- t_Action->setTag(kSpeedAction);
- //生产一个回调函数动作
- CCCallFunc * callfun = CCCallFunc::create(this,callfunc_selector(mC_Creep::movebyActionCallBack));
- //生产一个系列动作,让移动完后调用movebyActionCallBack函数
- CCFiniteTimeAction * seq = CCSequence::create(t_Action,callfun,NULL);
- //生产速度动作,用于后面的炮弹减速效果
- CCSpeed * speedaction = CCSpeed::create((CCActionInterval *)seq,1.0f);
- speedaction->setTag(kSpeedAction);
- //设置成正在移动。前面有判断如果正在移动就不运作这个函数了
- _moving = true;
- //开始所有的动作
- _creep->runAction(speedaction);
- }
首先是一个moveto动画,computeFinishTime是用路程除以速度得到的时间,当然这路程是一小段一小段的直线距离。
最后看看
- void mC_Creep::movebyActionCallBack()
- {
- //设置成动作已经完成,可以调用creepMove()让精灵移动
- _moving = false;
- do
- {
- // CCLOG("pointnow is :%d",_wayPointNow);
- //改变当前露点。我们已经移动过来了
- _wayPointNow++;
- //如果下一个露点序号超出了,所有露点序列的范围
- if(_wayPointNow>(sHWorld->_wayPoint->count()))
- {
- //定制所有动作
- _creep->stopAllActions();
- //HP 设为 0 ,让它消失
- _creepHP = 0;
- //设置为永远在动,不让它再运行creepMove();
- _moving = true;
- break;
- }
- //修改动画
- setDirectionAnimation(getDirection());
- } while (0);
- }
基本上也就这个意思了,我是个新手水平肯定是不高的,如果有错误请指出,欢迎。
转载于:https://blog.51cto.com/farsa/1137360
cocos2d-x 2x 菜鸟编塔防 02 添加敌人相关推荐
- Unity_塔防游戏(7)敌人炮塔之间的Collider碰撞优化
1.给炮塔Turret添加刚体和碰撞器: 2.给敌人和炮塔 添加两个层 Turret 和 Enemy 完成上面两部 再给 游戏prefab预制体 加上Turret 和 Enemy 层标签 3.Edit ...
- 用Unity开发一款塔防游戏(一):攻击方设计
大家好.偶尔想起了这个手把手教学的.但现已长满杂草的坑,还是来挖几铲子. 这一期的游戏是最常见的类型之一--塔防. 塔防游戏相信大家并不陌生,几个主要元素如下: 1.敌方士兵 2.我方防御塔 3.我方 ...
- canvas塔防小游戏-保卫大司马
项目地址: http://codeape.site:8181/#/protectTheHorse b站地址: https://www.bilibili.com/video/bv1xZ4y1v7ju 基 ...
- 使用Unity创建塔防游戏(Part1)
How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...
- 微信小程序做塔防类游戏
开发一款塔防游戏需要以下步骤: 设计游戏规则和关卡设计,包括塔防类型.敌人类型.塔类型.升级系统等. 使用微信开发者工具创建新的小程序项目. 使用小程序框架(WXML.WXSS和JavaScript) ...
- 微信塔防小游戏开发教程,唤境引擎制作塔防游戏分享
今天带来的是塔防游戏制作攻略! 点击这里来下载工程文件, 点击这里可以下载工程中所用的素材哦~ 预览状态时敌人会从四个生成点随机生成,并且会自动寻路绕过黑色墙体走向红色终点.点击黑色墙体可以创建炮塔, ...
- 如何制作一个塔防游戏 Cocos2d x 2 0 4
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...
- (译)如何使用cocos2d制作一个塔防游戏:第三部分
原文链接地址:http://www.iphonegametutorials.com/2011/04/19/cocos2d-game-tutorial-%E2%80%93-how-to-build-a- ...
- (译)如何做一个塔防游戏(cocos2d 2012-8-17)
PS:一直关注http://www.raywenderlich.com/这个网站,前几天看了他们8月17发的一个塔防游戏教程,试了一下感觉不错,搜了一下没发现没有译成中文的(不知道现在有没有),就自己 ...
最新文章
- 管理已“死”,经营为王时代来临
- 千亿级市场赛道,阿里云视频云拿下 “三连冠”
- BCVP开发者说第4期:Remember.Core
- Silverlight+WCF 新手实例 象棋 棋子定位与象棋类(四)
- 几何画板中该如何插入公式
- ZXing实现扫描或选取图片识别二维码及条码功能
- for of 的基本用法
- 使用python制作属于自己的地铁图
- JAVA 仿XP画图板的总结
- 夜深人静写算法(九)- Dancing Links X(跳舞链)
- 好记性不如烂笔头,要保持学习
- 【软件project】 文档 - 银行业务管理 - 需求分析
- win11家庭版如何彻底关闭病毒实时保护
- bzoj3238 [ AHOI2013 ] --后缀自动机
- php语言中Excel表格导入数据库的方法详解
- (英国剑桥大学)部署机器学习中的挑战:案例研究综述(上)中文译文 Challenges in Deploying Machine Learnings: a Survey of Case Studies
- 基于 Python 的图书借阅管理系统(附报告源码)
- 学习笔记(2020.9.21)
- 采用七对策远离白内障
- c 语言的数据类型ppt,C语言第3章数据类型.ppt
热门文章
- 日志管理:(二)og4j.xml警告log4j:WARN The content of element type log4j:configuration m
- 再高深的 Python 面试难题,这门课都给你整得明明白白!
- 【年度盘点】10个热门Python练习项目
- 黑客秘籍:7个有趣的信息安全项目
- kubernetes之一步一个坑
- mysql每秒57000_MySQL 性能:使用 MySQL 5.7 实现每秒 50 万查询
- 匹配正则_Day233:正则表达式匹配方法 match()
- 关联查询的延迟加载是怎么实现的?
- 支付宝支付 - 构建支付表单填并提交
- 微信支付 - 支付中心回调通知