继承ActionInterval来实现圆周运动
来源:互联网 发布:野猪骑士升级数据 编辑:程序博客网 时间:2024/06/12 01:06
<1>JNCircleBy.h
//// CircleBy.h// JNTest//// Created by jianan on 15/6/3.////#ifndef __JNTest__CircleBy__#define __JNTest__CircleBy__#include "cocos2d.h"USING_NS_CC;class JNCircleBy : public ActionInterval{public: static JNCircleBy* create(float duration, Vec2 center, float angleBy = 360.0f, float radius = -1); virtual void startWithTarget(Node* target) override; virtual void update(float dt) override; virtual JNCircleBy* reverse() const; virtual JNCircleBy* clone() const;CC_CONSTRUCTOR_ACCESS: JNCircleBy() {}; virtual ~JNCircleBy() {}private: Vec2 getPosInCircleByAngle(float angle); //根据旋转角度得到点在圆上的位置 CC_SYNTHESIZE(float, _fRadius, Radius); //半径 CC_SYNTHESIZE(Vec2, _ptCenter, Center); //圆心 CC_SYNTHESIZE(float, _fStartAngle, StartAngle); //初始角度 CC_SYNTHESIZE(float, _fAngleBy, AngleBy); //要旋转的角度private: CC_DISALLOW_COPY_AND_ASSIGN(JNCircleBy); };#endif /* defined(__JNTest__CircleBy__) */
<2>JNCircleBy.cpp
//// CircleBy.cpp// JNTest//// Created by jianan on 15/6/3.////#include "CircleBy.h"JNCircleBy* JNCircleBy::create(float duration, Vec2 center, float angleBy, float radius){ JNCircleBy* circle = new JNCircleBy(); if(!circle){ return NULL; } circle->initWithDuration(duration); circle->_fStartAngle = 0.0f, circle->_fAngleBy = 0.0f; circle->_ptCenter = center; circle->_fRadius = radius; circle->_fAngleBy = angleBy; circle->autorelease(); return circle;}void JNCircleBy::startWithTarget(Node* target){ ActionInterval::startWithTarget(target); if(_fRadius == -1){ _fRadius = (target->getPosition() - _ptCenter).length(); } _fStartAngle = CC_RADIANS_TO_DEGREES( -((target->getPosition() - _ptCenter).getAngle() - M_PI / 2.0) ); target->setPosition(getPosInCircleByAngle(_fStartAngle));}void JNCircleBy::update(float dt){ Node* target = getTarget(); if(!target){ return; } target->setPosition(_ptCenter + getPosInCircleByAngle(_fStartAngle + dt * _fAngleBy));}JNCircleBy* JNCircleBy::reverse() const{ return JNCircleBy::create(getDuration(), _ptCenter, -_fAngleBy, _fRadius);}JNCircleBy* JNCircleBy::clone() const{ return JNCircleBy::create(getDuration(), _ptCenter, _fAngleBy, _fRadius);}Vec2 JNCircleBy::getPosInCircleByAngle(float angle){ float rad = CC_DEGREES_TO_RADIANS(angle); return Vec2(_fRadius * sin(rad), _fRadius * cos(rad));}<3>使用
void HelloWorld::Main(float dt){ // Sprite* sp = Sprite::create("CloseNormal.png"); sp->setPosition(Vec2(winSize.width/3, winSize.height/3)); this->addChild(sp); //以屏幕中心为原点做圆周运动 JNCircleBy* circle = JNCircleBy::create(2.0f, Vec2(winSize.width/2, winSize.height/2), -360.0f); sp->runAction(RepeatForever::create(circle)); }
0 0
- 继承ActionInterval来实现圆周运动
- 圆周运动
- as实现小球做圆周运动
- cocos2dx学习笔记:自定义动作实现圆周运动
- IOS CALayer实现圆点绕圆周运动--CAKeyframeAnimation的使用
- 继承Thread类来实现多线程
- 借助虚继承来实现不允许继承的类
- 圆周运动js
- 曲线运动,圆周运动
- Android单独继承View类来实现自定义控件
- 【代码】Android 单独继承View类来实现自定义控件
- 通过继承来实现注解方式的属性注入
- 使用内部类来实现Java的”多继承“
- 继承的拓展(利用组合来实现复用)
- 源码分析继承Thread和实现Runnable来创建线程
- 用内部类来间接的实现多继承
- cocos2d-x v3.3 ActionInterval
- 公有继承意味着 "是一个",私有继承意味着"用...来实现(避免切片)"
- Java软件开发中的几种认识误区
- Scala for the Impatient课后练习(第1章 The Basics)
- 数据分析(工具篇)笔记---回归分析
- 边读边计算的如果用计数器则可以指定读取第几行内容第一例(答复:咨询VB读文本文件,文本文件有N行,3列。想得到1、2列相同时。3列的值求和)http://bbs.csdn.net/topics/390
- 加盟学天
- 继承ActionInterval来实现圆周运动
- UITableView 横向滚动(二)
- 面试形象标准礼仪
- 设计模式remember——模板方法模式
- Leetcode Problem.118—Pascal's Triangle
- 第13周项目3-立体类组共有的抽象类
- 西乡专业治疗阳痿早泄疾病的医院
- Linux kallsyms 机制分析
- 西乡割包皮包茎手术哪家医院比较好