cocos2d-x 3.2 椭圆运动

cocos2d-x 3.2 椭圆运动,第1张

概述直接上代码: //// OvalAction.h// LSWGameIOS//// Created by lsw on 14-10-27.////#ifndef __LSWGameIOS__OvalAction__#define __LSWGameIOS__OvalAction__#include "cocos2d.h"typedef struct OvalConf


直接上代码:

////  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 椭圆运动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存