CCAction运动中没有实现椭圆运动或者圆周运动,于是在网上找了很多相关帖子,有一个CCCircleBy可以实现圆周运动,但是当使用CCRepeatForever循环运动时,总是会卡一下,所以在网上有找了一个实现椭圆运动的例子,当长半轴和短半轴相等时,就是圆周运动,这个循环运动倒是不卡。

#include "../actions/CCActionInterval.h" //包含系统延时类动作头文件

#define PI 3.14159

typedef struct _lrTuoyuanConfig{

CCPoint centerPosition; //中心点坐标

float aLength; //长半轴

float cLength; //椭圆c长,也就是半焦距

}lrTuoyuanConfig;

class __declspec(dllexport) LRTuoyuanBy : public CCActionInterval

{

public:

bool initWithDuration(float f, const lrTuoyuanConfig& c);

virtual void update(float time);

public:

static LRTuoyuanBy* actionWithDuration(float t, const lrTuoyuanConfig& c);

static inline float tuoyuanXat(float a, float bx, float c, float t)

{

return -a*cos(2*PI*t)+a;

}

static inline float tuoyuanYat(float a, float by, float c, float t)

{

float b = sqrt(powf(a,2)-powf(c,2));

return b*sin(2*PI*t);

}

protected:

lrTuoyuanConfig m_sConfig;

CCPoint m_startPosition;

CCPoint s_startPosition;

};

//实现文件为:

LRTuoyuanBy* LRTuoyuanBy::actionWithDuration(float t, const lrTuoyuanConfig& c)

{

LRTuoyuanBy* pTuoyuanBy = new LRTuoyuanBy();

pTuoyuanBy->initWithDuration(t,c);

pTuoyuanBy->autorelease();

return pTuoyuanBy;

}

bool LRTuoyuanBy::initWithDuration(float t, const lrTuoyuanConfig& c)

{

if(CCActionInterval::initWithDuration(t))

{

m_sConfig = c;

return true;

}

return false;

}

void LRTuoyuanBy::update(float time)

{

if(m_pTarget)

{

CCPoint s_startPosition = m_sConfig.centerPosition; //中心点坐标

float a = m_sConfig.aLength;

float bx = m_sConfig.centerPosition.x;

float by = m_sConfig.centerPosition.y;

float c = m_sConfig.cLength;

float x = tuoyuanXat(a, bx, c, time); //调用之前的坐标计算函数来计算出坐标值

float y = tuoyuanYat(a, by, c, time);

m_pTarget -> setPosition(ccpAdd(s_startPosition, ccp(x-a, y))); //由于我们画计算出的椭圆以原点为中心,所以要加上原来设定的中心点坐标

}

}

下面看看怎样使用

首先定义一个lrTuoyuanConfig

lrTuoyuanConfig config;

config.centerPosition = ccp(240,160);

config.aLength = 100;

config.cLength = 60;

sprite -> runAction(CCRepeatForever::create(LRTuoyuanBy::actionWithDuration(1.0f, config));

这样就可以让精灵实现无限椭圆运动

当cLength = 0时,就是圆周运动

cocos2d-x2.2实现椭圆运动,参数为中心点坐标和长半轴、短半轴相关推荐

  1. mysql图形查询操作 点找面及面找点 Polygon获取中心点坐标 空间地理位置计算

    SET @x = 121; SET @y = 30; -- SET @point = CONCAT('POINT(',@x,' ',@y,')'); set @point= Point(@x,@y); ...

  2. 【百度地图】城市中心点坐标

    百度地图城市中心点坐标 118.778074408,32.0572355018 江苏省-南京市 120.873800951,32.0146645408 江苏省-南通市 118.296893379,33 ...

  3. UG/NX 二次开发(C#) 获取曲面的中心点坐标

    二开过程中,需要用到曲面的中心点坐标,没有直接的获取方法,找了一些群友问,大佬甩我一句0.5uv,完全没看明白什么意思,没有设计基础做二开的是尴尬. 经过多方查阅资料终于明白大佬的意思,顺便整理出来与 ...

  4. arcgis怎么转面的中心点并计算中心点坐标

    打开arcgis软件,加载数据: 打开ArcTool box工具,数据处理工具-要素-要素转点,或者打开搜索器直接搜索"要素转点"即可: 打开ArcTool box工具,数据处理工 ...

  5. 在平面内,已知矩形的中心点坐标、长、宽和倾斜角度,求矩形四个角点的坐标

    实现思路: 1.已知矩形的中心点坐标.长和宽,求矩形在不旋转的情况下矩形的四个顶点坐标: 2.再求按逆时针旋转一定角度后的四个点坐标: (在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度 ...

  6. opencv识别图像红色区域,并输出红色区域中心点坐标

    适用小白,大佬勿喷 个人配置:vs2013 ; opencv 3.0 ; 直接上效果图 注意:右下角的水印把中心点挡住了,要仔细看才能看到 下面是代码: #include <iostream&g ...

  7. 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...

    C语言问题,编写一个程序计算矩形的面积和周长 我是新手,很多不懂,初学 代码为: #include void main(){float x,y; printf("请输入长和宽:\n" ...

  8. 【使用MATLAB 5点确定出一个椭圆并画图确定中心点坐标】

    文章目录 前言 一.在MATLAB中任意输入5个点 二.求出唯一的标准椭圆方程 1.标准椭圆方程 2.画出椭圆 3.求椭圆中心点 4.完整代码 总结 前言 在平面几何中,3点可以确定唯一的圆,5点可以 ...

  9. 不同坐标系下3D bbox通过中心点坐标和长宽高求8个角点问题

    这种问题可分解为三步: 1.根据长(l)宽(w)高(h)计算出一个和正向运动方向重合的3D bbox的8个角点坐标向量: x_corners = [-l/2,-l/2,l/2,l/2,-l/2,-l/ ...

最新文章

  1. 【radar】毫米波雷达简介
  2. 世界首个2nm制程芯片公布!这次IBM跑在了台积电三星英特尔前面
  3. php如何判断当前的操作系统是linux还是windows
  4. linuxliveu盘怎么用_linux mint 12 U盘(live usb)安装及体验
  5. foobar2000实现用手机远程控制PC命令行版
  6. 我没有时间 I Don't Have Time?
  7. 在有位图索引的表上进行DML操作与enq: TX - row lock contention等待事件问题分析
  8. mac虚拟机parallels装Ubuntu无法联网
  9. 【转录调控网络】基因转录调控网络——转录因子调控网络分析
  10. 使用虚拟光驱显示函数不正确的解决
  11. 在格式化的场景下,React input 的光标的处理办法
  12. [HDU]6069 Counting Divisors
  13. mysql查询当前时间的前后几天时间
  14. LNMP 配置漏洞系列解读
  15. lm283_飞利浦LED泛光灯具 BVP283 LED户外照明灯具350W 超高功率泛光灯
  16. 禁止 input 自动填充
  17. Linux 系统优化相关经验总结
  18. 企业ERP管理软件有哪些?哪个好
  19. 微信公众号如何做数据分析?4大模块34个关键指标
  20. 洛谷2495 【SDOI2011】消耗战(虚树)

热门文章

  1. C#不同窗体之间传递参数
  2. 在Eclipse中集成Genymotion模拟器插件
  3. 荣耀笔记本(预装deepin版)的正确使用姿势
  4. Ubuntu18安装deepin-wine微信、QQ
  5. 百度推出的echarts,制表折线图柱状图饼图等的超级工具(转)
  6. HTML5(七)表格-table标签、tr标签、td标签
  7. h3c trunk口改access,区别:交换机三种端口模式Access、Hybrid和Trunk
  8. cesium,实现下雨下雪效果切换
  9. C++中使用TinyXML2读写文件
  10. 推荐三款强大的有3D效果的js图表库