直接上代码:

//
// OvalAction.h
// LSWGameIOS
//
// Created by lsw on 14-10-27.
//
// #ifndef __LSWGameIOS__OvalAction__
#define __LSWGameIOS__OvalAction__ #include "cocos2d.h" typedef struct OvalConfig {
cocos2d::Vec2 centerPos;
float a;
float b;
bool moveClockDir;
std::pair<int, int> zOrder;
}LOvalConfig; class MoveOvalBy : public cocos2d::ActionInterval {
public:
MoveOvalBy();
~MoveOvalBy(); bool initWithDuration(float dt, const OvalConfig& c);
virtual MoveOvalBy* clone() const override;
virtual MoveOvalBy* reverse() const override;
virtual void update(float dt);
virtual void startWithTarget(cocos2d::Node *target) override; static MoveOvalBy* create(float dt, const OvalConfig& c); protected:
OvalConfig _config; inline float getPosXAtOval(float dt) {
if (_config.moveClockDir) {
return _config.a * cos(4 * MATH_PIOVER2 * dt);
}
return _config.a * cos(4 * MATH_PIOVER2 * (1 - dt));
} inline float getPosYAtOval(float dt) {
if (_config.moveClockDir) {
return _config.b * sin(4 * MATH_PIOVER2 * dt);
}
return _config.b * sin(4 * MATH_PIOVER2 * (1 - dt));
} }; #endif /* defined(__LSWGameIOS__OvalAction__) */

cpp文件:

//
// OvalAction.cpp
// LSWGameIOS
//
// Created by lsw on 14-10-27.
//
// #include "OvalAction.h" USING_NS_CC; MoveOvalBy::MoveOvalBy()
{ } MoveOvalBy::~MoveOvalBy()
{ } MoveOvalBy *MoveOvalBy::create(float dt, const OvalConfig &c)
{
auto moveOvalBy = new MoveOvalBy();
if (moveOvalBy && moveOvalBy->initWithDuration(dt, c))
{
moveOvalBy->autorelease();
return moveOvalBy;
} return nullptr;
} bool MoveOvalBy::initWithDuration(float dt, const OvalConfig &c)
{
if (ActionInterval::initWithDuration(dt))
{
_config = c;
return true;
} return false;
} void MoveOvalBy::update(float dt)
{
if (_target)
{
float x = getPosXAtOval(dt);
float y = getPosYAtOval(dt);
_target->setPosition(_config.centerPos + Vec2(x, y));
if (dt <= 0.5)
{
_target->setZOrder(_config.zOrder.first);
}
else
{
_target->setZOrder(_config.zOrder.second);
}
}
} MoveOvalBy *MoveOvalBy::clone() const
{
auto moveOvalBy = new MoveOvalBy();
if (moveOvalBy && moveOvalBy->initWithDuration(_duration, _config))
{
moveOvalBy->autorelease();
return moveOvalBy;
} return nullptr;
} MoveOvalBy *MoveOvalBy::reverse() const
{
OvalConfig newConfig;
newConfig.a = _config.a;
newConfig.b = _config.b;
newConfig.centerPos = _config.centerPos;
newConfig.moveClockDir = !_config.moveClockDir;
newConfig.zOrder = _config.zOrder;
return MoveOvalBy::create(_duration, newConfig);
} void MoveOvalBy::startWithTarget(Node *target)
{
ActionInterval::startWithTarget(target);
}

调用方法:

auto s1 = Sprite::create("CloseSelected.png");
addChild(s1);
s1->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
auto s2 = Sprite::create("CloseNormal.png");
addChild(s2);
OvalConfig c;
c.a = 100;
c.b = 10;
c.centerPos = s1->getPosition();
c.moveClockDir = false;
c.zOrder.first = -1;
c.zOrder.second = 1;
s2->runAction(RepeatForever::create(MoveOvalBy::create(1.0f, c)));

cocos2d-x 3.2 椭圆运动的更多相关文章

  1. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...

  2. 采用cocos2d-x lua 制作数字滚动效果样例

    require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...

  3. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  4. iPhone开发与cocos2d 经验谈

    转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...

  5. cocos2d学习记录

    视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...

  6. Android下Cocos2d创建HelloWorld工程

    最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...

  7. 学生信息管理系统(cocos2d引擎)——数据结构课程设计

    老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite*  spBG = CCSprite::create("&qu ...

  8. cocos2d触碰例子代码

    // // TestLayer.h // MiniTD // // Created by OnePiece on 12-7-30. // Copyright 2012年 __MyCompanyName ...

  9. 如何优化cocos2d程序的内存使用和程序大小

    在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...

  10. Atitit 游戏的通常流程 attilax 总结 基于cocos2d api

    Atitit 游戏的通常流程 attilax 总结 基于cocos2d api 加载音效1 加载页面1 添加精灵1 设置随机位置2 移动2 垃圾gc2 点击evt2 爆炸效果3 定时生成精灵3 加载音 ...

随机推荐

  1. 《OD学hadoop》第一周0626 作业二:Linux基础

    一.打包压缩 知识点: tar -zxvf -C PATH tar -jxvf tar -zcvf tar -jcvf tar:打包命令 -z 打包同时gzip压缩 -j 打包同时bzip2 -c 打 ...

  2. 如何为Eclipse安装Eclipse Marketplace插件

    Eclipse Marketplace是个插件应用商店,很实用的一个功能. 打开 eclipse,help--Eclipse Marketplace Client就能找到 有的eclipse中没有这个 ...

  3. 【笨嘴拙舌WINDOWS】消息机制

    如果将WINDOWS比做一个人,那么他就是为你提供各种服务的巫师,他手上有各式各样,奇形怪状的奇葩物品.他脑子充满了智慧,能够为你解决你所不能解决的疑难杂症.但是他不认识你! 你从小立志要想考状元,去 ...

  4. Java之网络编程笔记

    网络通讯要素: 1.IP地址 IP地址:用于标记一台计算机的身份证. IP地址由网络地址(确定网络)和主机地址(网络中的主机)组成. IP地址分为A类地址.B类地址.C类地址(常用).D类地址.E类地 ...

  5. 解决VS2013/VS2010简体中文版无法使用ReSharper快捷键的问题

    对于简体中文版VS2013,若应用ReSharper快捷键失效,按下面方法修复: 1) 首先在ReSharper设置里,应用你的快捷键设置 2) 关闭VS2013,然后用记事本打开“%LOCALAPP ...

  6. 【转】Eclipse常用快捷键

    原文网址:http://denver.blog.51cto.com/272871/52219 编辑相关快捷键 1.[Alt+/] 为用户提供内容的辅助. 2.[Ctrl+O] 显示类中方法和属性的大纲 ...

  7. NoSQL--非关系型的数据库是什么?

    NoSQL,指的是非关系型的数据库.NoSQL,意即反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前 ...

  8. vmware 连网

    Nat 这 种方式下,虚拟机的网卡连接到宿主的 VMnet8 上.此时系统的 VMWare NAT Service 服务就充当了路由器的作用,负责将虚拟机发到 VMnet8 的包进行地址转换之后发到实 ...

  9. 使GridView可以单行横向滑动

    最近做的练手的小项目中存在一个横向滑动的问题,需要HorizontalScroll中嵌套GridView,但是GridView默认是竖直排放的item,况且HorizontalScroll与GridV ...

  10. MYSQL性能查看(命中率,慢查询)

    网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...