cocos2d-x2.2实现椭圆运动,参数为中心点坐标和长半轴、短半轴
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实现椭圆运动,参数为中心点坐标和长半轴、短半轴相关推荐
- mysql图形查询操作 点找面及面找点 Polygon获取中心点坐标 空间地理位置计算
SET @x = 121; SET @y = 30; -- SET @point = CONCAT('POINT(',@x,' ',@y,')'); set @point= Point(@x,@y); ...
- 【百度地图】城市中心点坐标
百度地图城市中心点坐标 118.778074408,32.0572355018 江苏省-南京市 120.873800951,32.0146645408 江苏省-南通市 118.296893379,33 ...
- UG/NX 二次开发(C#) 获取曲面的中心点坐标
二开过程中,需要用到曲面的中心点坐标,没有直接的获取方法,找了一些群友问,大佬甩我一句0.5uv,完全没看明白什么意思,没有设计基础做二开的是尴尬. 经过多方查阅资料终于明白大佬的意思,顺便整理出来与 ...
- arcgis怎么转面的中心点并计算中心点坐标
打开arcgis软件,加载数据: 打开ArcTool box工具,数据处理工具-要素-要素转点,或者打开搜索器直接搜索"要素转点"即可: 打开ArcTool box工具,数据处理工 ...
- 在平面内,已知矩形的中心点坐标、长、宽和倾斜角度,求矩形四个角点的坐标
实现思路: 1.已知矩形的中心点坐标.长和宽,求矩形在不旋转的情况下矩形的四个顶点坐标: 2.再求按逆时针旋转一定角度后的四个点坐标: (在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度 ...
- opencv识别图像红色区域,并输出红色区域中心点坐标
适用小白,大佬勿喷 个人配置:vs2013 ; opencv 3.0 ; 直接上效果图 注意:右下角的水印把中心点挡住了,要仔细看才能看到 下面是代码: #include <iostream&g ...
- 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...
C语言问题,编写一个程序计算矩形的面积和周长 我是新手,很多不懂,初学 代码为: #include void main(){float x,y; printf("请输入长和宽:\n" ...
- 【使用MATLAB 5点确定出一个椭圆并画图确定中心点坐标】
文章目录 前言 一.在MATLAB中任意输入5个点 二.求出唯一的标准椭圆方程 1.标准椭圆方程 2.画出椭圆 3.求椭圆中心点 4.完整代码 总结 前言 在平面几何中,3点可以确定唯一的圆,5点可以 ...
- 不同坐标系下3D bbox通过中心点坐标和长宽高求8个角点问题
这种问题可分解为三步: 1.根据长(l)宽(w)高(h)计算出一个和正向运动方向重合的3D bbox的8个角点坐标向量: x_corners = [-l/2,-l/2,l/2,l/2,-l/2,-l/ ...
最新文章
- 【radar】毫米波雷达简介
- 世界首个2nm制程芯片公布!这次IBM跑在了台积电三星英特尔前面
- php如何判断当前的操作系统是linux还是windows
- linuxliveu盘怎么用_linux mint 12 U盘(live usb)安装及体验
- foobar2000实现用手机远程控制PC命令行版
- 我没有时间 I Don't Have Time?
- 在有位图索引的表上进行DML操作与enq: TX - row lock contention等待事件问题分析
- mac虚拟机parallels装Ubuntu无法联网
- 【转录调控网络】基因转录调控网络——转录因子调控网络分析
- 使用虚拟光驱显示函数不正确的解决
- 在格式化的场景下,React input 的光标的处理办法
- [HDU]6069 Counting Divisors
- mysql查询当前时间的前后几天时间
- LNMP 配置漏洞系列解读
- lm283_飞利浦LED泛光灯具 BVP283 LED户外照明灯具350W 超高功率泛光灯
- 禁止 input 自动填充
- Linux 系统优化相关经验总结
- 企业ERP管理软件有哪些?哪个好
- 微信公众号如何做数据分析?4大模块34个关键指标
- 洛谷2495 【SDOI2011】消耗战(虚树)