cocos2d-x 2x 菜鸟编塔防 03 让炮台对准敌人
来源:互联网 发布:软件界面设计工具 编辑:程序博客网 时间:2024/04/28 02:45
前面2篇已经简单的实现了几个功能,下面我们要让炮台对准出现的敌人,这样才能对敌人发射子弹。
这篇主要的就是让炮台跟随敌人旋转角度,网上这类的也很多,但大部分都是C# 和object c的,cocos2d-x 的例子里面有一个这个方面的好像是ClickAndMoveTest
原来很简单,就是遍历所有敌人,通过计算敌人和炮台的两点距离判断是否进入射程,如果进入射程就计算炮台旋转角度,启动旋转动画,用一个回调来发射子弹。
直接上代码吧:
town头文件
- #ifndef __MC_TOWN_H__
- #define __MC_TOWN_H__
- #include "cocos2d.h"
- #include "HWorld.h"
- #include "mC_Creep.h"
- using namespace cocos2d;
- class mC_Town : public cocos2d::CCNode
- {
- public:
- mC_Town();
- ~mC_Town();
- public://共有变量
- public://共有函数
- CREATE_FUNC(mC_Town);
- //初始化
- bool init();
- //逻辑,this->schedule(gameLogic, 1.0f);
- void gameLogic(float dt);
- //炮台旋转的回调函数
- void rotateActionCallBack();
- private://私有变量
- //炮台图片
- CCSprite * _town;
- //炮台的位置
- const CCPoint * _townpoint;
- //炮台的攻击速度
- int _firespeed;
- //炮台的攻击范围,圆形的半径
- float _firerange ;
- //是否在移动
- bool _rotating;
- ////目标在数组中的编号
- //int _targetnum;
- private://私有函数
- };
- #endif
town cpp文件
- #include "mC_Town.h"
- mC_Town::~mC_Town()
- {
- }
- mC_Town::mC_Town()
- {
- }
- void mC_Town::gameLogic( float dt )
- {
- do
- {
- //-----------------1.判断是否有目标----------------------------
- //如果炮台正在移动则跳出
- if(_rotating) break;
- //遍历所有creep
- CCObject * object;
- //查找进入射程的creep
- CCARRAY_FOREACH(sHWorld->_creepGroup,object)
- {
- mC_Creep * t_creep= (mC_Creep*)object;
- //用炮台的位置和敌人的位置计算出距离,如果距离小于炮台射程就发射子弹
- float t_range = ccpDistance(
- this->getPosition(),
- t_creep->getCreepSprite()->getPosition()
- );
- //如果进入射程就旋转炮台,发射子弹
- if (_firerange>t_range)
- {
- //旋转town
- float o = t_creep->getCreepSprite()->getPosition().x - this->getPosition().x;
- float a = t_creep->getCreepSprite()->getPosition().y - this->getPosition().y;
- float at = (float) CC_RADIANS_TO_DEGREES( atanf( o/a) );
- if( a < 0 )
- {
- if( o < 0 )
- at = 180 + fabs(at);
- else
- at = 180 - fabs(at);
- }
- //开始旋转动作
- CCFiniteTimeAction * seq = CCSequence::create(
- CCRotateTo::create(0.5f,at),
- //回调,用于将炮台设置成不再移动_rotating = false ,并发射子弹
- CCCallFunc::create(this,callfunc_selector(mC_Town::rotateActionCallBack)),
- NULL
- );
- _town->runAction(seq);
- //设置成正在移动炮台
- _rotating = true;
- //CCLOG("rangge is : %f",t_range);
- break;
- }
- }
- } while (0);
- }
- bool mC_Town::init()
- {
- //初始化
- _firerange = 300;
- //初始化是否正在移动
- _rotating = false;
- //创建一个town,用于测试
- _town=CCSprite::create("CloseNormal.png");
- this->addChild(_town);
- //启动永动游戏逻辑
- this->schedule(schedule_selector(mC_Town::gameLogic));
- return true;
- }
- void mC_Town::rotateActionCallBack()
- {
- _rotating = false;
- //开火
- }
本文出自 “远在南非” 博客,请务必保留此出处http://farsa.blog.51cto.com/6172595/1138602
- cocos2d-x 2x 菜鸟编塔防 03 让炮台对准敌人
- cocos2d-x 2x 菜鸟编塔防 02 添加敌人
- cocos2d-x 2x 菜鸟编塔防 04 子弹要打准敌人
- cocos2d-x 2x 菜鸟编塔防 01 准备工作
- cocos2d-x 2x 菜鸟编塔防 01 准备工作
- Cocos2d-x中,实现类似捕鱼达人的炮台
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第六步---炮台&点击炮台添加英雄&英雄升级
- cocos2d-x格斗游戏教程(四)攻击敌人
- cocos2d-x 炮台旋转和子弹移动的一点小技巧
- [cocos2d-x]捕鱼达人炮台射击角度的旋转实现
- cocos2d-x 菜鸟编塔防 05 预加载资源
- cocos2d-x 菜鸟编塔防 05 预加载资源
- cocos2d-x 菜鸟实习生学习篇
- Cocos2d-X之菜鸟笔记—3
- 菜鸟Cocos2D-X遇到的坑
- <cocos2d-x for wp7>使用cocos2d-x制作基于Tile地图的游戏:加入敌人和战斗(三)
- cocos2d-x 让游戏画面变暗
- cocos2d-x让win32响应键盘事件
- count(1)与count(*)比较
- cocos2d-x 2x 菜鸟编塔防 01 准备工作
- cocos2d-x 自建动画管理器AnimationManager的方法和使用
- cocos2d-x 2x 菜鸟编塔防 02 添加敌人
- 今天试博akljhfjkhfvlsjhj:谈谈学习交流实践总结
- cocos2d-x 2x 菜鸟编塔防 03 让炮台对准敌人
- cocos2d-x 2x 菜鸟编塔防 04 子弹要打准敌人
- 看看别人的apk文件中的图片是怎么弄的(提取apk中的图片)
- cocos2d-x 中的pvr.ccz压缩图片的使用方法【iOS游戏开发征文】
- ASCII,Unicode和UTF-8
- 提取android apk文件中的dat格式的图片资源
- cocos2d-x 自己写的一个scrollview 有待完善
- xcode使用中的小技巧(不断总结)
- cocos2d-x 一个简单的游戏界面