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分,能够继续翻牌,假设两张牌不一样,就换一个人.直到最后.看谁的 ...
随机推荐
- 洛谷 P2444 [POI2000]病毒 解题报告
P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...
- SCOI 股票交易 单调队列优化dp
这道题 我很蒙.....首先依照搞单调队列优化dp的一般思路 先写出状态转移方程 在想法子去优化 这个题目中说道w就是这一天要是进行操作就是从前w-1天转移而来因为之前的w天不允许有操作!就是与这些天 ...
- DES 加密解密
[概念] 数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常 ...
- spring 中的@Import注解和@ImportResource注解
概述:@Import注解是引入带有@Configuration的java类. @ImportResource是引入spring配置文件.xml 案例的核心代码如下: package com.timo. ...
- 记录一发wm_concat()函数排序的问题
需求:需要将列转行之后的工序按照待执行工序号排序,如果一样按工序号排 解决方法如下: select part_no, max(ywggx) ywggx from(select mt.part_no , ...
- springMvc4+hibernate4+activiti5.15(Maven)
首先创建activiti表 方式1.用代码创建 package createtable; import org.activiti.engine.ProcessEngineConfiguration; ...
- [bzoj3098]Hash Killer 2——哈希
题目 这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题: 给你一个长度为N的字符串S,求有多少个不同的长度为L的子串. 子串的定义是S[l].S[l + 1].- S[r]这样连续的一 ...
- hdu 2899 Strange fuction (二分)
题目链接:http://acm.hdu.edu.cn/showproblem.pihp?pid=2899 题目大意:找出满足F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x ( ...
- ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57【转】
转自:http://www.myir-tech.com/resource/448.asp 前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功 ...
- 2.flume架构以及核心组件
flume组件主要包含三部分 source:从各个地方收集数据 channel:聚集,相当于临时数据存放的地方.因为数据来的时候,不可能来一条便写一次,那样效率太低,而是先把数据放在通道里,等通道满了 ...