Cocos2d-Lua 做一个活动转盘
这类活动你肯定见过
关于转盘类型的活动我相信大家多多少少都接触到了,很多的抽奖界面都是这类型的,今天这篇小文章就简单的总结一下我们游戏中需要实现这样一个效果的时候我们该怎样去做,其实只要是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 做一个活动转盘的更多相关文章
- 笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)
在这之前,声明一下: 做不完我是小狗. 没办法,没毅力和恒心,之前的那个Quick Cocos2dx做的横版过关游戏的demo已经转成了3.3的版本了,其实也算是个半成品,战斗,UI啥的都有了,呵呵. ...
- 做一个 App 前需要考虑的几件事
做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...
- 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎
Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...
- fir.im Weekly - 如何做一个出色的程序员
做一个出色的程序员,困难而高尚.本期 fir.im Weekly 精选了一些实用的 iOS,Android 开发工具和源码分享,还有一些关于程序员的成长 Tips 和有意思有质量的线下活动~ How ...
- 领导让我重新做一个微信H5页面!
leader:我们需要做一个微信H5页面,效果如图,功能如描述,时间越快越好. 需求是不是很简单呢?2015-11-24 12:44:00文末有最新更新 背景描述 前几天微信转发相关项目开发后,这是第 ...
- 做一个App前需要考虑的几件事
本文转载于文章原文链接,版本归原作者所有! 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后, ...
- [转载]做一个 App 前需要考虑的几件事
本文转自http://limboy.me/tech/2016/07/06/starting-an-app.html ========================================= ...
- 【Android】Intent的使用-返回数据给上一个活动
第一个Activity A启动另外一个Activity B,B返回数据给A ============================================================= ...
- Cocos2d Lua 越来越小样本 内存游戏
1.游戏简介 一个"记忆"类的比赛游戏.你和电脑对战,轮到谁的回合,谁翻两张牌,假设两张牌一样.就消掉这两张牌,得2分,能够继续翻牌,假设两张牌不一样,就换一个人.直到最后.看谁的 ...
随机推荐
- hdu6121 build a tree(树)
题解: 可以考虑每一层结点的子树大小 必定满足下面的情况,即 a,a,a,a,a,a,b,c,c,c,c........ 然后每一层依次往上更新,结果是不变的 一共有logn层,所以依次扫上去,统计结 ...
- last_query_cost
The total cost of the last compiled query as computed by the query optimizer. This is useful for com ...
- myisam_sort_buffer_size vs sort_buffer_size
Q: I am MySQL on server with 6GB RAM. I need to know what is the difference between myisam_sort_buff ...
- 把java的class文件打成jar包的步骤
现在我的文件夹的目录在: C:\Users\linsenq\Desktop\cglibjar 我要把位于这个目录下的所有文件夹以及这个文件夹下的.class文件打成jar包 第一步:用win+R 打开 ...
- JS中this的指向问题(读书笔记纯手打~)
一.this JavaScrip的this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境. 二.this的指向 根据运用情景可分为四类: 1.作为对 ...
- java简单发送邮件
需要的jar 据说是: <dependency> <groupId>javax.mail</groupId> <artifactId>mail</ ...
- shell分发文件脚本
配置文件scp.conf ssh_hosts=("IP") #需要分发机器的所有IP ssh_ports=("22") ssh_users=("roo ...
- node导入导出的问题
node的每一个文件,都是一个域,那么里面所有的变量都不允许被外界引用,除非导出去.要使用外界的变量,也必须使用导入的方式导入进来. import 变量名 from '文件地址'//css可以直接导入 ...
- 创建堆 HeapCreate
创建额外的堆的原因1.对组件进行保护2.更有效的内存管理3.局部访问4.避免线程同步开销5.快速释放 HeapCreate函数原型:HANDLE WINAPI HeapCreate( _In_ DWO ...
- mysql五-2:多表查询
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id ...