cocos2d-x 3.2 椭圆运动
2024-08-24 12:35:02
直接上代码:
//
// 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)));
最新文章
- laravel中TokenMismatchException异常处理
- 0012 win7x64安装CentOS7
- BZOJ 1208: [HNOI2004]宠物收养所
- json 数据交换格式与java
- 【BZOJ】2152: 聪聪可可(点分治)
- NimBus一个好的开发框架
- android中的Handler
- awk多个数组的使用
- java提高篇(十四)-----关键字final
- HDU 3696 Farm Game
- IOS开发创建开发证书及发布App应用(一)——流程说明
- 关于java中,json字符串转集合和对象,或者集合转json字符串的解决方法
- Devexpress GridControl 多选
- 在SoapUI中模拟用户操作
- 什么是Zookeeper?
- linux下yum安装及配置
- Linuxs升级系统自带的openssh
- thinkphp 3.2.1 URL 大小写问题 下面有具体说明
- windows7下的一个好玩的,你绝对不知道
- IO流-基础
热门文章
- Incorrect key file for table &#39;/tmp/#sql_882_0.MYI&#39;; try to repair it
- 函数fsp_fill_free_list
- DataGridView 相关操作
- 51nod1556 计算
- ASP.NET MVC 4 WebAPI. Support Areas in HttpControllerSelector
- HDU 5339 Untitled (暴力枚举)
- python练习程序(c100经典例10)
- win7下的IP-主机名映射
- mysql 在大型应用中的架构演变
- makefile实例(3)-多个文件实例优化