cocos2d-x 3.2 椭圆运动
来源:互联网 发布:linux网络编程开源项目 编辑:程序博客网 时间:2024/04/30 01:51
直接上代码:
//// 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)));
0 0
- cocos2d-x 3.2 椭圆运动
- 椭圆运动
- cocos2d-x-3.2 Follow屏幕锁定精灵运动
- cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- (转)cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)
- cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- cocos2d-x 运动中的加速度效果
- cocos2d-x 运动中的加速度效果
- cocos2d-x实现node圆弧运动
- Cocos2d-x 实现运动的尾巴效果
- Cocos2d-x 实现运动的尾巴效果
- cocos2d-x 运动中的加速度效果
- cocos2d-x 运动中的加速度效果
- Cocos2d-x加速度计实例:运动的小球
- cocos2d-x 运动中的加速度效果
- Cocos2d-X 物体重复运动的实现
- 【cocos2d-x游戏开发】图片的“运动”
- Linux系统Loadaverage负载详细解释
- Symfony - view
- Remove Duplicates from Sorted Array II
- 原创内容的五个技巧
- DockerFile详解
- cocos2d-x 3.2 椭圆运动
- 某通信设备集团公司日常巡检应用案例
- 如何做好百度引擎排名
- [.Net码农]收集一些字符串的用法
- 平衡树的调整 案例与代码
- JQuery语法
- phpcms在网站主页调用单页内容
- s-des密码算法实现
- 学习记录