1。 检测炮塔视线范围内距离它最近的敌人。

int length=0;

float index=0;

for (int i=0; i<Game::allEnemy.size(); i++) {

auto nowEmeny=Game::allEnemy.at(i);

if (length==0) {

length=this->getPosition().distance(nowEmeny->getPosition());

}else

{

if (this->getPosition().distance(nowEmeny->getPosition())<length) {

length=this->getPosition().distance(nowEmeny->getPosition());

index=i;

}

}

}

2. 如果最近的敌人 nearestEnemy 存在,弓箭则会旋转,所以我们需要计算弓箭旋转的角度和旋转时间。
炮塔与敌人的之间的角度关系可以表示为: tan a = offY / offX ,而 rotateVector =( offX offY )。
getAngle 方法将返回 rotateVector 向量与 X 轴之间的弧度数。但旋转弓箭我们需要的是角度,所以这就需要
把弧度 rotateRadians 转化为角度。 Cocos2d-x 中提供了能把弧度转化为角度的宏
CC_RADIANS_TO_DEGREES
另外, Cocos2d-x 中规定顺时针方向为正,这显然与我们计算出的角度方向相反,所以转化的时候需要把角
a 变为 -a

speed 表示炮塔旋转的速度, 0.5/ M_PI 其实就是 1 / 2PI ,它表示 1 秒钟旋转 1 个圆。

rotateDuration表示旋转特定的角度需要的时间,计算它用弧度乘以速度

Vec2 rotateVector=Game::allEnemy.at(index)->getPosition()-this->getPosition();

float rotateRadians=rotateVector.getAngle();

float rotateDegrees=CC_RADIANS_TO_DEGREES(-1 *rotateRadians);

//    this->ang=rotateDegrees;

float speed=0.5/M_PI;

float rotateDuration=fabs(rotateRadians *speed);

rotateArrow->runAction(Sequence::create(

RotateTo::create(rotateDuration, rotateDegrees),

CallFunc::create(CC_CALLBACK_0(TD::shoot, this)), NULL));

}

最后在创建游戏塔的同时定义一个计划函数:

newtd->schedule(schedule_selector(TD::roateAndShoot),0.5);

[cocos2d-x学习笔记][入门基础][塔防]塔防游戏中箭塔旋转并攻击实现相关推荐

  1. Hadoop学习笔记(1) ——菜鸟入门

     Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户能够在不了解分布式底层细节的情况下.开发分布式 ...

  2. iOS学习笔记-地图MapKit入门

    代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...

  3. 【学习笔记】密码学入门(2) 单向散列函数,消息认证码,数字签名,证书

    [学习笔记]密码学入门(2) 单向散列函数,消息认证码,数字签名,证书 学习笔记 2 – 混合密码系统 在密码学入门(1)中提到了基本的密码形式,对称密码和公钥密码以及混合密码系统. 这一部分将学习到 ...

  4. 逐梦旅程学习笔记 DirectX开发入门02:旋转的彩色立方体

    本文是 系列笔记DirectX部分的第2篇,上一篇参见 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架 这个示例增加了一些实际的内容,首先是绘制一个颜色随机变幻的彩色立方体,其二是显示 ...

  5. oracle 删除awr报告,学习笔记:Oracle awr入门 深入了解AWR报告

    天萃荷净 深入了解AWR报告,ASH与AWR报告的官方说明,数据库进程和性能视图获取 1.AWR与ASH概念 1.ASH 若是一个普通的会话(我是指没有大量地耗费资源),则对于性能调整来说无足轻重.但 ...

  6. 【学习笔记】Mininet 入门

    [学习笔记]Mininet入门实战 课程介绍 Mininet是由一些虚拟的终端节点.交换机.路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美. Mininet可以很 ...

  7. 【PaddlePaddle学习笔记】从零开始学习图像分类01——图像处理入门基础

    本系列文章链接 [PaddlePaddle学习笔记]从零开始学习图像分类01--图像处理入门基础 未完待续...... 目录 一.关于图像的几个基本概念 1. 像素及其坐标 2. 图像的四种基本类型 ...

  8. oracle rman ora19602,学习笔记:OracleRMAN备份入门 将RMAN备份数据放到nfs远程文件系统中...

    天萃荷净 rman通过nfs备份,记录一篇关于使用RMAN备份软件,将RMAN的备份结果集存放到远程的NFS文件系统中 1.RMAN挂载至nfs文件系统 [root@oracleplus tmp]# ...

  9. 【学习笔记】JavaWeb入门篇—HTML

    [学习笔记]JavaWeb入门篇-HTML

最新文章

  1. seci-log 1.11 发布 增加了ftpserver,远程ftp,sftp采集简化配置等功能
  2. 开店攻略: 购买行为越来越冲动性
  3. 【Python】Effective Python 读书笔记
  4. python绘制帕累托图
  5. fibonacci数列前20项_数学第十七课:数列综合应用第一弹
  6. Java实现查看SEGY(.su格式)数据道头字信息的GUI图形用户界面
  7. Python之 dict(字典)(回)
  8. tolua#是Unity静态绑定lua的一个解决方案
  9. 文字处理技术:有哪些难点?
  10. fleaPHP框架的一些基础问题
  11. Spring事务@Transactional注解原理
  12. shell脚本练习题(编程题)。
  13. adb connect 连接机顶盒显示:由于目标计算机积极拒绝,无法连接10061
  14. 2.15范冰增长黑客读书笔记
  15. 微信账单动态吸顶功能实现逻辑
  16. C语言中 sinx cosx 的用法
  17. 时序预测 | MATLAB实现BiLSTM时间序列预测
  18. AntV G6 的坑之——从卡掉渣到满帧需要几步
  19. 紫外功率测试软件,紫外灯253.7nm紫外线辐射功率、电气特性的测量方法
  20. 大数据时代的10个重大变化

热门文章

  1. systemverilog使用$fwrite系统函数打印信息到屏幕
  2. 电子科技大学(深圳)研究院22计算机考研上岸经验分享贴
  3. 基于QT开发PC端文件加密工具
  4. Google Cloud Platform 学习笔记
  5. 记录使用surface遇到的bug及解决方案
  6. 超短口语|两个单词一句话
  7. 2022年全球市场汽车挡风玻璃升降器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  8. 微信用fiddler抓取openid
  9. 字节AL LAB nlp 日常实习面试失败
  10. arduino利用三种方法产生pwm波使用l298n驱动12v小车电机(附电路连接图和pwm详解)