大佬教程收集整理的这篇文章主要介绍了cocos2d-x 3.2 椭圆运动,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_607_1@
直接上代码:
// // 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__) */
@H_607_1@
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); }@H_607_1@ @H_607_1@
调用方法:
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 椭圆运动所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。