推荐阅读:

一。前言

      在前面给大家分享了大转盘的抽奖方式,这是现在游戏使用较多的一种抽奖方式,今天给大家介绍另一抽奖方式——水果机,这是以前街机游戏使用较多的抽奖方式。该方式使用选中奖品的方式来进行抽奖。

二。算法讲解

先声明几个变量来控制选项依次选中的转动效果,可在properties里面声明,以方便调试时修改数值:

		//最大速度
maxSpeed: {
default: 20,
type: cc.Float,
max: 30,
min: 1,
},
//减速时间==加速时间
duration: {
default: 2,
type: cc.Float,
max: 10,
min: 1,
},
//加速度
acc: {
default: 8,
type: cc.Float,
max: 10,
min: 1,
},
gearNum: {
default: 10,
type: cc.Integer,
max: 10,
min: 1,
},

不需要经常修改的变量,声明在onLoad中:

this.wheelState = 0;      //转盘状态  1--加速  2--减速   0--静止
this.curSpeed = 0; //当前速度
this.spinTime = 0; //减速前旋转时间
this.firstAngle = 30; //每个奖品的中间角度
this.gearAngle = 60; //每个奖品的角度
this.finalAngle = 0; //最终结果指定的角度
this.decAngle = 3 * 360;//减速旋转三周

抽奖转动状态设置为3个阶段,0(未转动),1(加速阶段),2(减速状态)。在加速状态时,通过判断转动速度是否达到最大速度来判断下一阶段是继续加速还是开始减速。在减速阶段,通过判断减速阶段需要转动的角度是否等于减速阶段已经转过的角度,从而判断转动是否结束。

三。功能实现

1.加速阶段

		if (self.wheelState == 1)
{
self.spinTime += dt;//加速阶段的时间累计
self.uiRoot.startAward.rotation += self.curSpeed;//每帧后旋转的角度
this.showIndexLight(self.uiRoot.startAward.rotation);//显示指针到达区域的奖品的外发光 if (self.curSpeed <= self.maxSpeed) {
self.curSpeed += self.acc;//修改下一帧速度
} else {
if (self.spinTime < self.duration) {//判断时间是否到
return;
}
//设置目标值
self.finalAngle = self.targetID * self.gearAngle + self.firstAngle;//指针最后停留的位置
self.maxSpeed = self.curSpeed;//当前速度未转动过程中的最大速度
self.wheelState = 2;
}
}

2.减速阶段

		 else if (self.wheelState == 2)
{
var curRo = self.uiRoot.startAward.rotation;
var hadRo = curRo - self.finalAngle;//减速阶段已经转过的角度
self.curSpeed = self.maxSpeed * ((self.decAngle - hadRo) / self.decAngle) + 0.2;//后面加一个数是使指针最后能停下来
self.uiRoot.startAward.rotation += self.curSpeed;
this.showIndexLight(self.uiRoot.startAward.rotation); if ((self.decAngle - hadRo) <= 0) {//判断是否转完
self.wheelState = 0;
self.uiRoot.startAward.rotation = self.finalAngle;
this.showIndexLight(self.uiRoot.startAward.rotation);
//大转盘结束后的一些列操作,根据实际情况需要增加删除
self.ctrolWheelItem(true);
self.uiRoot.close.active = true;
self.uiRoot.startBtn.active = true;
self.uiRoot.close.active = true;
self.uiRoot.sign.interactable = true;
self.uiRoot.wheel.interactable = true;
for (let i = 0; i < self.uiRoot.wheelBg.childrenCount; i++) {
cc.find("item" + i, self.uiRoot.wheelBg).getComponent(cc.Button).interactable = true;
} var data = cls.WheelLayer._srvData.SC_Wheel_Info;
let info = gm.GameData.getBagDataById(data.award[this.targetID].id); self.showRewardBox(data.award[this.targetID].id, info.Icon, data.award[this.targetID].num); console.log("抽奖操作结束,需要同步奖励奖励数据,暂时不知道同步到哪里去");
}

同步指针指到的奖品区域外发光

    //显示指针到达的区域发光
showIndexLight(rot) {
var index = parseInt(rot / 60) % 6;/60代表每个奖品格子的角度,6代表一共6个格式
for (let i = 0; i < this.wheelLight.length; i++) {
this.wheelLight[i].active = false;
}
this.wheelLight[index].active = true;
},

水果机抽奖(CocosCreator)的更多相关文章

  1. 【Vue.js游戏机实战】- Vue.js实现九宫格水果机抽奖游戏总结

    大家好!先上图看看本次案例的整体效果. 完整版实战课程附源码:[Vue.js游戏机实战]- Vue.js实现九宫格水果机抽奖 实现思路: Vue component实现九宫格水果机组件,可以嵌套到任意 ...

  2. 【Vue.js游戏机实战】- Vue.js实现老虎-机抽奖总结

    大家好!先上图看看本次案例的整体效果. 完整版实战课程附源码:[Vue.js游戏机实战]- Vue.js实现老虎-机抽奖 实现思路: Vue component实现老虎-机组件,可以嵌套到任意要使用的 ...

  3. 《微赢微信公众平台系统5月14最新破解高级运营版+水果机+邀请函+微汽车+微食品+用户CRM》

    <微赢微信公众平台系统5月14最新破解高级运营版+水果机+邀请函+微汽车+微食品+用户CRM> 此版本号眼下是淘宝卖600RMB的,其他VIP源代码论坛也都还没有公布.咱们这里全然免费分享 ...

  4. 手把手教你用JS/Vue/React实现幸运水果机(80后情怀之作)

    项目体验地址 免费视频教程 分别使用原生JS,Vue和React,手把手教你开发一个H5小游戏,快速上手Vue和React框架的使用. 项目截图 在线体验 在线体验 游戏介绍 幸运水果机是一款街机游戏 ...

  5. 从零开始手把手教你使用原生JS+CSS3实现幸运水果机游戏

    项目体验地址 免费视频教程 游戏介绍 幸运水果机是一款街机游戏,游戏界面由24个方格拼接成一个正方形,每个方格中都有一个不同的水果图形,方格下都有一个小灯.玩家使用游戏币选择希望押注的目标,按下开始后 ...

  6. 抽奖动画 - lao虎机抽奖

    本文介绍一个lao虎机抽奖动画的实现,lao虎机抽奖在各类商家营销活动中非常常见,这里主要介绍动画的实现过程,其他细节不做详细分析. ps:lao虎机是敏感词,博客园不允许出现,所有老用拼音. 1. ...

  7. 原生javascript实现老.虎机抽奖点名demo源码思路解析

    想着使用原生Javascript做一个随机点名的小应用, 也可以做抽奖使用. html简单化,人名单可以通过js生成并处理. 可以非常随意的添加修改人名字. 应用想带点特效,比如老.虎机转动的特效. ...

  8. H5水果机,一个网络版的lao hu ji

    该游戏为h5小游戏,纯属娱乐,技术探讨,相关技术在文章结尾,欢迎探讨交流 花了几天时间开发了这款水果lao hu ji,更新了几个版本,还有不足的地方,由于时间有限暂时没有继续更新新版本 未完成的功能 ...

  9. cocos 水果机,老Tiger虎机流水灯,博彩大转盘效果

    原(http://www.cnblogs.com/zisou/p/cocos2d-xZhuanpan.html) 博彩大转盘,转盘抽奖的小系统,这是一个很有意思的游戏模块,游戏中增加这样一些趣味的小模 ...

随机推荐

  1. socket发送请求,协程

    1.socket发送请求 #发送请求的方式 #方式一 import requests ret = requests.get("https://www.baidu.com/s?wd=abc&q ...

  2. 实现简单的 IOC 和 AOP

    1 简单的 IOC 1.1 简单的 IOC 容器实现的步骤 加载 xml 配置文件,遍历其中的标签 获取标签中的 id 和 class 属性,加载 class 属性对应的类,并创建 bean 遍历标签 ...

  3. python查漏补缺 --- 模块及异常

    1.方法定义好之后,如,def test(x) : ,此时将方法名赋值给一个新的变量,那么该变量等同于方法,可以具备test方法内部的全部功能2.导包的时候,可以使用as关键字在不同的名称下导入模块或 ...

  4. 【iOS】UIAlertController 弹出框

    UIAlertView 虽然还能用,但已经废弃了.因此以后尽量用 UIAlertController.示例代码如下: UIAlertController *alert = [UIAlertContro ...

  5. java中map,set的简单使用

    package test2; import java.util.*; import static java.lang.System.out; public class test2 extends St ...

  6. 浅析scrapy与scrapy_redis区别

    最近在工作中写了很多 scrapy_redis 分布式爬虫,但是回想 scrapy 与 scrapy_redis 两者区别的时候,竟然,思维只是局限在了应用方面,于是乎,搜索了很多相关文章介绍,这才搞 ...

  7. 【POJ - 3258】River Hopscotch(二分)

    River Hopscotch 直接中文 Descriptions 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一块岩石跳到另一块岩石.这项激动人心的活动在一条长长的笔直河道中进行,在起点 ...

  8. 无法正常卸载pr

    控制面板找不到pr和ps,根本无法卸载,我试过官方工具没用,也试过ccleaner,也检测不到?

  9. Unittest 支持 case 失败后自动截图功能的另外两种方式

    原生的unittest框架是不支持case失败后自动截图的功能的,网上看了大家的解决办法,大体上分为两种:1.要么加装饰器2.也有人封装断言这里我们看看还有没有其他的更加方便的方法值得大家一起探讨一下 ...

  10. L1063 能量项链

    1 #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = a; i <= b ...