这类活动你肯定见过


关于转盘类型的活动我相信大家多多少少都接触到了,很多的抽奖界面都是这类型的,今天这篇小文章就简单的总结一下我们游戏中需要实现这样一个效果的时候我们该怎样去做,其实只要是Cocos类型的,不管是C++的还是JS还是Lua他们之间的道理是相同的,类似于下面这样图的效果:

其实这类型的活动效果无非就分下面两种:

1、指针转动

2、底盘转动

但其实这两点在实现方面是完全一样的,我们需要控制的只是那个控件在我们设置的条件下转动。

代码需要注意的点


1、我们不能让指针停止在两个区域之间的线上

2、往往结束转动之后我们还是需要做很多操作的,该怎么写

3、最简单的写法

针对上面三点我们也简单的说说:

1、不能让停止在两个区域之间的线上我们就得设置一个最小的偏移量,保证不让停止在这个偏移量之内

2、我们利用cc.Sequence

3、最简单的方式就是让每个抽奖区域模块化,我们只需要告诉我们封装的转动的代码,你需要停止在哪个位置

核心代码


下面的区域就是我们设置的区块,因为活动中奖概率这种一般都是后台设置好概率计算好中奖结果之后给你数据,你只需要展示一个效果就行,因为这个概率是需要后台配置改变的,不会让移动端把这些写死的,就像很多人玩的王者荣耀一样,其实在点击了抽奖还没有执行抽奖动画之前其实你仔细看看都已经知道自己中了什么了,仔细看你的钻石或者金币刷新就知道了!

-- 开始抽奖
-- stopId 中间区域
-- sprRound 转到的指针
function ActitvityItem2:onStartDrawALotteryOrRaffle(sprRound,stopId) if GlobalUserItem.bSoundAble then
self.music= AudioEngine.playEffect(cc.FileUtils:getInstance():fullPathForFilename("sound/ZPZD.wav"),true)
end
-- ExternalFun.playClickMusic("ZPZD")
--转盘总奖项数
local totalCount = 8
--转动最小圈数
local roundCountMin = 8
--转动最大圈数
local roundCountMax = 14
--所有奖项概率相同时 这样计算每个奖项占的角度 如果概率不同,可以使用table数组来处理
local singleAngle = 360/totalCount
--为了避免不必要的麻烦,在接近2个奖项的交界处,左右偏移n角度的位置,统统不停留 否则停在交界线上,这个值必须小于最小奖项所占角度的1/2
local offsetAngle = 10
--转盘停止位置的最小角度 不同概率时,直接把之前的项相加即可
local angleMin = (stopId-1) * singleAngle
--转盘转动圈数 目前随机 正常情况下可加入力量元素 根据 移动距离*参数 计算转动圈数
local roundCount = math.random(roundCountMin, roundCountMax)
--检查一下跳过角度是否合法 当前奖项角度-2*跳过角度 结果必须>0
--转动角度
local angleTotal = 360*roundCount + angleMin + math.random(offsetAngle, singleAngle-offsetAngle)
-- print('stopId:'..stopId)
-- print('angleMin:'..angleMin)
-- print('roundCount:'..roundCount)
-- print('angleTotal:'..angleTotal)
--复位转盘
sprRound:setRotation(0)
--开始旋转动作使用EaseExponentialOut(迅速加速,然后慢慢减速)
sprRound:runAction(cc.Sequence:create( cc.EaseExponentialInOut:create(cc.RotateBy:create(4.0, angleTotal)),
cc.CallFunc:create(function()
self:onEndAction(stopId)
end)
))

最后,这是核心代码,里面的东西都加了注释的,还有里面几个角度的点需要注意一下的,这个仔细看看就能理解!

Cocos2d-Lua 做一个活动转盘的更多相关文章

  1. 笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)

    在这之前,声明一下: 做不完我是小狗. 没办法,没毅力和恒心,之前的那个Quick Cocos2dx做的横版过关游戏的demo已经转成了3.3的版本了,其实也算是个半成品,战斗,UI啥的都有了,呵呵. ...

  2. 做一个 App 前需要考虑的几件事

    做一个 App 前需要考虑的几件事  来源:limboy的博客   随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...

  3. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

  4. fir.im Weekly - 如何做一个出色的程序员

    做一个出色的程序员,困难而高尚.本期 fir.im Weekly 精选了一些实用的 iOS,Android 开发工具和源码分享,还有一些关于程序员的成长 Tips 和有意思有质量的线下活动~ How ...

  5. 领导让我重新做一个微信H5页面!

    leader:我们需要做一个微信H5页面,效果如图,功能如描述,时间越快越好. 需求是不是很简单呢?2015-11-24 12:44:00文末有最新更新 背景描述 前几天微信转发相关项目开发后,这是第 ...

  6. 做一个App前需要考虑的几件事

    本文转载于文章原文链接,版本归原作者所有! 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后, ...

  7. [转载]做一个 App 前需要考虑的几件事

    本文转自http://limboy.me/tech/2016/07/06/starting-an-app.html ========================================= ...

  8. 【Android】Intent的使用-返回数据给上一个活动

    第一个Activity  A启动另外一个Activity B,B返回数据给A ============================================================= ...

  9. Cocos2d Lua 越来越小样本 内存游戏

    1.游戏简介 一个"记忆"类的比赛游戏.你和电脑对战,轮到谁的回合,谁翻两张牌,假设两张牌一样.就消掉这两张牌,得2分,能够继续翻牌,假设两张牌不一样,就换一个人.直到最后.看谁的 ...

随机推荐

  1. 洛谷 P2529 [SHOI2001]击鼓传花 解题报告

    P2529 [SHOI2001]击鼓传花 题意:求出\(n!\)末尾最后一位非0数字 数据范围:\(n<=10^{100}\) 我们从简单的开始考虑 1.显然,\(n!\)可以被这么表示 \(n ...

  2. CENSORING

    CENSORING 题目描述 FJ为它的奶牛订阅了很多杂志,balabala.......,其中有一些奶牛不宜的东西(比如如何煮牛排). FJ将杂志中所有的文章提取出来组成一个长度最多为10^5的字符 ...

  3. JavaScript的大括号的语义

    Javascript中大括号"{}"有四种语义作用: 语义1. 组织复合语句,这是最常见的: view source   print? 1 if( condition ) { 2 ...

  4. 代码管理工具 (含git、npm、gulp)

    1 Git 分布式代码管理工具(基于Linux,可在本地进行提交)代码同时储存在本地和服务器中 ① Git基本操作命令 (1)初始化,创建初始化仓库 git init ------- 文件初始化,初始 ...

  5. 转:nginx入门指南,快速搭建静态文件服务器和代理服务器

    本文介绍 Nginx 入门基础知识,让你迅速搭建 Nginx 服务器.主要内容包括 Nginx 安装和简单使用.Nginx的简单原理.Nginx 配置文件的结构.如何使用 Nginx 来提供静态文件服 ...

  6. java封装的使用

    一:前言 其实以前我们来学习java特性的时候,对于封装好想觉得没什么用处,至少我那个时候的感觉(不知道是不是我学的太浅薄了~),现在由于项目从零开始做得,在做得过程中我感觉到原来封装是这样用的. 二 ...

  7. 【bzoj3926- [Zjoi2015]诸神眷顾的幻想乡】广义sam

    题意:给定一棵树,每个节点有一个颜色,问树上有多少种子串(定义子串为某两个点上的路径),保证叶子节点数<=20.n<=10^5 题解: 叶子节点小于等于20,考虑将每个叶子节点作为根把树给 ...

  8. 【SPOJ - QTREE2】树链剖分

    http://acm.hust.edu.cn/vjudge/problem/19960 题意: 有一棵N个节点的树(1<=N<=10000),N-1条边,边的编号为1~N-1,每条边有一个 ...

  9. Bzoj1692 洛谷P2870 [Usaco2007 Dec]队列变换

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1570  Solved: 656 Description FJ打算带他的N(1 <= N <= ...

  10. codevs1063 合并果子 优先队列(小根堆)

    题目传送门 这道题很容易想到优先把两堆重量最小的合并比较优 然后乱搞一下就可以啦 #include<cstdio> #include<cstring> #include< ...