直接上代码:

//
// 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学HBase》20160814

    一.HBase引入 http://hbase.apache.org/ 大数据的数据库 1. 概述 Hadoop生态系统中的一个分布式.可拓展.面向列.可伸缩,具有自动容错功能的数据库. NoSQL数据 ...

  2. hadoop环境搭建笔记

    一.配置Linux (1)cat /etc/networks (2)cat /etc/sysconfig/network (3)vi /etc/udev/rules.d/70-persistent-n ...

  3. Jquery-json

    第三方插件: jquery.json-2.4.js Jquery-json 是 jQuery 的一个插件,可轻松实现对象和 JSON 字符串之间的转换.可序列化 JavaScript 对象.数值.字符 ...

  4. Large Object Heap内存碎片在.NET 4.5中的改进

    .NET 4.5已然到来,预览了解了下Large Object Heap在.NET 4.5中的效能改进.借此和大家来探讨下.本文不讨论Loder Heap,SOH(samll object heap) ...

  5. QQ发送邮件

    //下面开始写SendEmail函数 public void SendEmail(string Emailshoujian, string Emailbiaoti, string Emailzheng ...

  6. C与C++的区别无随时更新

    C没有calss类,只有结构体struct class A;  在C中这样写就是错误的,C没有关键字class C的字符指针不会自动开辟内存空间,必须对这个指针指向的地址手动开辟空间后才可以写入数据. ...

  7. Btn要记得对状态进行设置

    self.catBtn = [UIButtonbuttonWithType:UIButtonTypeSystem]; self.catBtn.backgroundColor = [UIColorred ...

  8. Android之Socket群组聊天

    在这只做了一个简单的例子,没有用到数据库,思路就是客户端发送信息到服务器端,服务器端转发所有数据到客户端,校验服务器端发来消息是否是自己发出的,如果是自己发出的,则不显示自己的消息 贴一下Androi ...

  9. xxx

       <div style="position:absolute;left:0px;top:50px;width:1300px;height:550px;"><d ...

  10. java-swing在组件中显示信息

    package com.http; import java.awt.*; import javax.swing.*; public class TestSwing2 { //创建了一个能够绘制的组件 ...