关于椭圆轨迹的一个设计 cocos2dx
来源:互联网 发布:慈溪行知职高招聘 编辑:程序博客网 时间:2024/05/24 07:41
cocos2dx 自带了一些属性变化的函数。均继承于CCActionInterval ,有了CCActionInterval,继承后便可以通过重写,在update方法中可以做各种属性变化。而轨迹运动则是其中一大项。
写过矩形的轨迹,圆形的轨迹,因为比较熟悉,都比较容易做出来。直到碰到椭圆。
这次要做角色选择界面,主要一个设计点在于几种门派的轮回转运,并且要有立体效果,椭圆轨迹是必需的了。
着手,开始。搜索到了些资源,再自己优化一下,因为我不仅仅需要的是可以整个椭圆的轨迹,还要运动其中某一段,这一段长短不好描述,就用角度吧。
头文件:
class TuoyuanBy : public CCActionInterval{public: bool initWithDuration(float t, CCPoint center , float al , float bl, float startAngle,float detlaAngle, bool isClockWise); virtual void startWithTarget(CCNode *pTarget); virtual void update(float time);//利用update函数来不断的设定坐标public: //用“动作持续时间”和“椭圆控制参数”创建动作 , t-持续时间 center-椭圆中心点 al-长边长 bl-短边长 starAngle-起始角度 detlaAngle-变化角度// isClockWise-是否顺时针方向 static TuoyuanBy *create(float t, CCPoint center , float al , float bl ,float startAngle, float detlaAngle , bool isClockWise);//以下inline函数是重点,关于这两个方法,我也搞不懂,在椭圆图形上看三角函数,并不合理,但使用后确实是可以实现椭圆形的轨迹,可以只是一个大概轨迹吧,不是 //很精确的 , 自己通过解二元函数又解不出来,太烦了,有更精确的计算跪求分享protected: inline float tuoyuanXat(float angle )//返回X坐标 { //参数方程 return m_a*cos(angle); } inline float tuoyuanYat(float angle )//返回Y坐标 { return m_b*sin(angle); }protected: CCPoint m_center; float m_a; float m_b; float m_detlaAngle; bool m_isClockWise; CCPoint m_startPosition; float m_startAngle;};
实现文件:
TuoyuanBy* TuoyuanBy::create(float t, CCPoint center , float al , float bl , float startAngle,float detlaAngle, bool isClockWise){ TuoyuanBy* mwcb = new TuoyuanBy(); mwcb->initWithDuration(t ,center ,al, bl, startAngle,detlaAngle,isClockWise); mwcb->autorelease(); return mwcb;}bool TuoyuanBy::initWithDuration(float t, CCPoint center , float al , float bl, float startAngle,float detlaAngle, bool isClockWise){ if (CCActionInterval::initWithDuration(t)) { m_center = center; m_a = al; m_b = bl; m_isClockWise = isClockWise;m_detlaAngle = 2* 3.1415926 * detlaAngle/360; //为了方便直观,传进来的angle是一个角度值,不是弧度值 m_startAngle = 2* 3.1415926 * startAngle/360; return true; } return false;}void TuoyuanBy::startWithTarget(CCNode *pTarget){ CCActionInterval::startWithTarget(pTarget); //设置初始位置,位于m_startAngle处 float xx = tuoyuanXat(m_startAngle); float yy = tuoyuanYat(m_startAngle); pTarget->setPosition(CCPoint(xx + m_center.x, yy + m_center.y)); m_startPosition = pTarget->getPosition();}void TuoyuanBy::update(float time){ if (m_pTarget) { float angle = m_startAngle + m_detlaAngle * time; float xx = tuoyuanXat(angle); float yy = tuoyuanYat(angle); m_pTarget->setPosition(CCPoint(xx + m_center.x, yy + m_center.y)); }}
再写个TuoyuanTo继承TuoyuanBy ,个人一般用TuoyuanTo。TuoyuanTo会有个问题,比如如果是顺时针运动,而角度是从0到270度,这个情况下求m_detlaAngle是会出问题的,要做些判断求值。
0 0
- 关于椭圆轨迹的一个设计 cocos2dx
- 椭圆轨迹的等待加载view--ParticleView
- 椭圆轨迹计算方法
- Android 椭圆轨迹动画
- 一个关于椭圆曲线密码学的初级读本
- 设计学习的轨迹
- javascript实现椭圆运动轨迹
- 按椭圆轨迹移动 javascript
- view按椭圆轨迹移动
- 一个简单的轨迹动画
- 让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- 让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- 原来椭圆在平移的同时绕型心旋转,极大值点的轨迹是漂亮的曲线
- 记录打印一个椭圆的有趣过程
- 关于误差椭圆的计算和含义
- 眼睛轨迹的研究-用户体验设计
- U3D关于抛物线的轨迹的做法
- 一个关于设计的流程图
- 显式加载DLL并使用 DLL 中的类(转)
- wamp多站点配置
- php出现 Notice: Undefined index: name 的解决方法
- 驱动编写技巧说明
- linux cp命令源码
- 关于椭圆轨迹的一个设计 cocos2dx
- QT模态对话框及非模态对话框
- jQuery - 设置内容和属性
- 如何读取CSV文件到DataTable中,然后存到数据库
- Yii自定义配置文件存放方法
- html文件中的元素
- STM32 DMA 应用之(一)SRAM 与flash 间数据传输
- 黑马程序员_Java开发前奏
- OpenGL ES 正反面设置指令