[cocos2d-x]捕鱼达人炮台射击角度的旋转实现
话不多说,先上图,下面是实现代码(在后面会具体讲解实现过程):
//第一步:将炮台的坐标转换为世界坐标下的坐标点
CCPoint location = this->getParent()->convertToWorldSpace(this->getPosition());
//第二部:计算出两个向量之间的夹角
float angle = ccpAngleSigned(ccpSub(target, location), CCPointMake(0, 1));
//因为求出的角度是以π为单位,所以这里要转换成以度为单位
this->setRotation(CC_RADIANS_TO_DEGREES(angle));
下面是ccpAngleSinged的实现代码:
CC_DEPRECATED_ATTRIBUTE static inline float ccpAngleSigned(const Vec2& a, const Vec2& b)
{
return a.getAngle(b);//可以看到,这里是a向量对b向量获取角度,我们再往里跳一步看具体的实现
}
我们再跳入getAngle看具体实现:
float Vec2::getAngle(const Vec2& other) const
{
//第一步:先将a,b向量进行规范化,也就是获得两个方向上的单位向量
Vec2 a2 = getNormalized();
Vec2 b2 = other.getNormalized();
//这一步很重要!!!留到最后来讲这一步的实现,涉及到了线性代数的一些知识
float angle = atan2f(a2.cross(b2), a2.dot(b2));
//判断角度是否小于浮点数能表示的最小值(float用的是IEEE754标准,23位表示尾数,8位表示数阶,1位表示尾数符号)
if (std::abs(angle) < FLT_EPSILON) return 0.f;
return angle;
}
接下来讲最重要的一步:
float angle = atan2f(a2.cross(b2), a2.dot(b2));
首先要了解一些线性代数的知识,向量积和数量积;atan2f是math库内的函数,而cross求的是向量积的模,dot求的是数量积,下面给出它们两个的代码:
/** Calculates cross product of two points.
@return float
@since v2.1.4
* @js NA
* @lua NA
*/
//这个求的是向量积,二维坐标下也就是一个二阶行列式的计算
inline float cross(const Vec2& other) const {
return x*other.y - y*other.x;
}
//这个求的是数量积
inline float Vec2::dot(const Vec2& v) const
{
return (x * v.x + y * v.y);
}
然后,我们要知道下面两个公式:
而通过上述的公式可知: arctan(tan⊙)=⊙,而向量积的模除以数量积的模等于tan⊙,经过这样一换算,很简单的就能得出这两个向量之间的角度。
最后,只需要调用精灵的setRotation旋转相应的角度即可。
PS:当然,如果不知道上面这两个公式也是能做的(毕竟引擎库都已经封装好了),我们也可以自己来实现这个角度的计算,比如通过射击目标到炮台位置的向量的X,Y方向长度,利用tan(y/x)=角度,直接计算出角度(不过这里可能要进行判断x的正负,需要一些其他的逻辑判断)
[cocos2d-x]捕鱼达人炮台射击角度的旋转实现的更多相关文章
- cocos2dx 3.x(捕鱼达人炮台角度换算)
// // GameScence.hpp // NotesDamo // // Created by apple on 16/10/23. // // #ifndef GameScence_hpp # ...
- js原生捕鱼达人(三)--完结
先给分享下我写完的效果,github有点卡,我没有压缩代码,不过效果可以看到 https://jasonwang911.github.io/ 转载请注明'转载于Jason齐齐的博客http://www ...
- js原生捕鱼达人(一)
捕鱼达人的游戏大家都很熟悉吧,接下来的两三天,我会将整个游戏的原生js写法详细的写出来,整个游戏应用了面向对象的写法:创建构造函数,在构造函数上面添加对象的属性,然后在构造函数的原型上添加方法,当然这 ...
- TOP30专访:捕鱼达人陈昊芝
原文:http://www.csdn.net/article/2012-04-04/313919/1 编者按:3月31日,第四届CocoaChina游戏开发者大会暨Cocos2D-X技术研讨会在北京举 ...
- 利用ZjDroid对 <捕鱼达人3> 脱壳及破解过程-转
http://blog.sina.com.cn/zihao2015 <捕鱼达人3> 刚出来不久,就被鬼哥Dump出来dex,随之破解也就轻而易举.一开始我用ZjDroid神器试验过,但是没 ...
- html5 canvas简易版捕鱼达人游戏源码
插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...
- 【Cocos2d-x for WP8 学习整理】(3)CCScrollView 实现捕鱼达人一样的场景选择界面
UI 界面一般是游戏里比较独立的地方,因为游戏引擎一般都比较注意基础的功能封装,很少会关注UI,但是 UI 确是玩家第一眼看到的效果,因此能否实现一个美观的UI对于提升游戏的整体美观有着很大的帮助. ...
- 基于HTML5的捕鱼达人游戏网页版
之前给大家分享了html5实现的水果忍者,愤怒的小鸟,中国象棋游戏.今天给大家分享一款捕鱼达人(fishjoy)网页版游戏的源码.可以在线玩也可以下载到本地.它使用html5技术和javascript ...
- 捕鱼达人代码例子下载地址 mac版
捕鱼达人代码例子下载地址 mac版: http://pan.baidu.com/share/link?shareid=1431898404&uk=3189484501
- 捕鱼达人代码例子下载地址 Win版
捕鱼达人代码例子下载地址 Win版:: http://pan.baidu.com/share/link?shareid=1601576904&uk=3189484501
随机推荐
- 【多线程那些事儿】如何使用C++写一个线程安全的单例模式?
如何写一个线程安全的单例模式? 单例模式的简单实现 单例模式大概是流传最为广泛的设计模式之一了.一份简单的实现代码大概是下面这个样子的: class singleton { public: stati ...
- C语言两个升序递增链表逆序合并为一个降序递减链表,并去除重复元素
#include"stdafx.h" #include<stdlib.h> #define LEN sizeof(struct student) struct stud ...
- python关于Django搭建简单博客项目(详解一)
上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答.本文没有特定顺序,请结合上一篇和源代码参照学习. 相关源代码和解析请参看:https://github.com/Cheng0829/mysi ...
- kubelet忽然不可用
原因,有可能机器的cpu信息有变化(扩容或者缩容)解决办法: 删掉/opt/var/lib/kubelet目录下(或者/data/lib/kubelet)cpu_manager_state文件 然后m ...
- Sublime Text 修改默认语言为Python
Sublime Text 3 修改默认语言为Python 步骤如下 英文:Tools - Developer - New Plugin 中文:工具 - 插件开发 - 新建插件 清空原来内容,用下面的代 ...
- cordon节点,drain驱逐节点,delete 节点
目录 一.系统环境 二.前言 三.cordon节点 3.1 cordon节点概览 3.2 cordon节点 3.3 uncordon节点 四.drain节点 4.1 drain节点概览 4.2 dra ...
- 抓包分析 TCP 握手和挥手
前言 首先需要明确的是 TCP 是一个可靠传输协议,它的所有特点最终都是为了这个可靠传输服务.在网上看到过很多文章讲 TCP 连接的三次握手和断开连接的四次挥手,但是都太过于理论,看完感觉总是似懂非懂 ...
- linux系统配置文件或shell脚本批量注释
1. 配置文件批量注释 1.1 批量注释 ① 进入命令行模式,按ctrl + v进入 visual block模式,键盘上下箭头选中多行,把需要注释的行标记起来 ② 按大写字母I,再输入注释符:# ③ ...
- mybatis一对多根据条件查询的查条数
一对多写了mapper映射之后 根据条件查条数 可以根据主表的唯一id进行分组 在拿到它的count select count(0) over(aa.id),,id,name,age from tab ...
- 一年一度!GitHub 开发者大会「GitHub 热点速递 v.22.45」
GitHub 是全球最大的开源社区,它的一举一动都深受每一位开源爱好者的关注.这周末刚落下帷幕的<GitHub Universe 2022>是 GitHub 发布最新产品.功能.报告和计划 ...