直接上代码:
//// 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 椭圆运动全部内容,希望文章能够帮你解决cocos2d-x 3.2 椭圆运动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)