cocos2dx之抽奖界面与获奖概率的设计(一)(2)
来源:未知 责任编辑:责任编辑 发表时间:2015-09-16 20:03 点击:次
再来看看咱们转盘中的粒子效果,有两种,第一种圆环的星星闪烁效果比较简单,设置下离中心的距离就好了,这里主要讲解以椭圆轨迹旋转的小彗星粒子效果。
既然以椭圆为轨迹,其实也就是实时更新下粒子的位置,但是椭圆的坐标怎么计算呢?想必部分人都忘记了吧(我也忘记了。。。),直接去问度娘吧:
咱们椭圆的中心即是转盘的中心,所以是一个标准的椭圆方程:
,对应的参数方程就是:
那么答案就出来啦,只要我们实时改变参数φ的值,那么椭圆上的坐标就会实时更新。知道原理了,我们再来看看怎么设计这样一个椭圆类。既然沿椭圆轨迹运动,那么为什么不把这一种动作设计成跟cocos2dx引擎中的动作Action一样呢?在使用的时候,我们只需要调用runAction就可以了。我们可以参考cocos2dx引擎动作类的设计。
来看头文件:
#ifndef _ELLIPSEBY_H_
#define _ELLIPSEBY_H_
#include cocos2d.h
USING_NS_CC;
#define PI 3.14159
//椭圆的参数信息
struct EllipseConfig
{
//椭圆a的长度
float ellipseA;
//椭圆b的长度
float ellipseB;
//椭圆的中心坐标
Vec2 cenPos;
//是否逆时针旋转
bool isAntiClockwise;
//目标开始旋转的位置,默认位置是在椭圆长轴右方,即值为0
float startAngle;
//目标自身的角度
float selfAngle;
};
class EllipseBy : public ActionInterval
{
public:
EllipseBy();
~EllipseBy();
//初始化函数,参数t为持续时间,config为椭圆参数
static EllipseBy * create(float t,const EllipseConfig & config);
bool initWithDuration(float t,const EllipseConfig & config);
//每帧更新当前椭圆坐标
virtual void update(float time) override;
//在动作开始前调用
virtual void startWithTarget(Node *target) override;
//动作的拷贝
virtual EllipseBy * clone() const override;
//动作的逆序
virtual EllipseBy * reverse() const override;
protected:
//获得椭圆上当前点坐标
inline Vec2 & getPosWithEllipse(float t)
{
float angle = 2 * PI * ((m_config.isAntiClockwise ? t : (1 - t)) + m_config.startAngle / 360);
return Vec2(m_config.ellipseA * cos(angle),m_config.ellipseB * sin(angle));
}
private:
EllipseConfig m_config;
};
#endif
我们定义了一个椭圆参数的结构体EllipseConfig,前面4个比较好理解,后面2个:startAngle是开始旋转粒子出现的位置,值为角度值。比如下面例图所示:


selfAngle是指把整个椭圆当成一个整体,这个整体的角度,类似于精灵的rotation属性。比如下面例图所示:
相关新闻>>
- Cocos2dx3.2编写常用UI组件(一)新手指导框GuideLayer
- cocos2dx之彩色编辑输入框的设计
- Cocos2dx3.2编写常用UI组件(三)收集器效果Collector
- cocos2dx 3.2 裁剪节点 ClippingNode
- cocos2dx背景透明处理
- cocos2dx 3.x判断node点击区域是否透明
- cocos2dx的runAction: 重复执行,多个动作连接执行,多个动作同时
- 关于cocos2dx lua中的clone函数的源码解读
- cocos2dx V3.2 mac os Xcode6.1 环境配置
- cocos2dx获取网络时间(二):浅析CCHttpClient
最新推荐更多>>>
- 发表评论
-
- 最新评论 进入详细评论页>>

![cocos2d_x+lua[2]](/uploads/allimg/131030/110J64609-0-lp.jpg)








