cocos2dx之抽奖界面与获奖概率的设计(一)(2)

来源:未知 责任编辑:责任编辑 发表时间:2015-09-16 20:03 点击:


再来看看咱们转盘中的粒子效果,有两种,第一种圆环的星星闪烁效果比较简单,设置下离中心的距离就好了,这里主要讲解以椭圆轨迹旋转的小彗星粒子效果。

既然以椭圆为轨迹,其实也就是实时更新下粒子的位置,但是椭圆的坐标怎么计算呢?想必部分人都忘记了吧(我也忘记了。。。),直接去问度娘吧:

咱们椭圆的中心即是转盘的中心,所以是一个标准的椭圆方程:

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150202/2015020208412352.png,对应的参数方程就是:data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150202/2015020208412353.png

那么答案就出来啦,只要我们实时改变参数φ的值,那么椭圆上的坐标就会实时更新。知道原理了,我们再来看看怎么设计这样一个椭圆类。既然沿椭圆轨迹运动,那么为什么不把这一种动作设计成跟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是开始旋转粒子出现的位置,值为角度值。比如下面例图所示:
data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150202/2015020208412354.pngdata-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150202/2015020208412355.png

selfAngle是指把整个椭圆当成一个整体,这个整体的角度,类似于精灵的rotation属性。比如下面例图所示:

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150202/2015020208412456.png

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
  • cocos2dx在xcode下开发,编译到android上(2)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1