1.在开发过程中,我们经常回有幸运抽奖的功能,那么这个到底怎么实现的呢?今天分享一个自己实现转盘的功能。
项目中整个转盘页面我直接复制过来的,就懒得剥离项目代码了。
主要实现转盘通过WheelState (//转盘状态 0- 静止 / 1 - 加速旋转 2 -减速旋转)来控制转盘旋转,在updata里面更新转盘角度来实现旋转.各种参数都有注释,仔细看一下转盘旋转逻辑,ui那些显示的东西就不用管了!
这是转盘页面
import { Account } from "./Framework/AccountData";
import { AdParam } from "./Framework/GameEnum";
import { UIBase } from "./Framework/Managers/UI/UIBase";
import { UIManager } from "./Framework/Managers/UIManager";
import { NetSend } from "./Framework/Network/NetSend";
import { NetUtil } from "./Framework/Network/NetUtil";
import { SDK } from "./Framework/SDK/SDKManager";
import Log from "./Framework/System/Util/Log";
import { UIUtil } from "./Framework/System/Util/UIUtil";
import { LevelControl } from "./LevelControl";
import { UIAddress } from "./UIAddress";
import { ItemData, UIItemReward } from "./UIItemReward";
import { UIRotaryItem } from "./UIRotaryItem";
import { UIRotaryRecord } from "./UIRotaryRecord";
import { UIRotaryRule } from "./UIRotaryRule";
//转盘个数
const WheelCount = 6;
//转盘
export class UIRotary extends UIBase {
public static Instance: UIRotary
public PrefabName = 'PanelRotary'
private _btnClose: cc.Button;
private _btnOk: cc.Button; //i know
private _wheel: cc.Node; //转盘
private curSpeed: number = 0; // 当前速度
private maxSpeed: number = 20; //最大速度
private WheelState: number = 0; //转盘状态 0- 静止 / 1 - 加速旋转 2 -减速旋转
private curDuration: number = 0; //转盘减速前当前旋转时间
private MaxDuration: number = 2.5; //转盘减速前最大旋转时间
private accSpeed: number = 1; //转盘当前加速度
private targetId: number = 0//RandomNumber(0, 6); //指定结束时的齿轮
private isback: Boolean = false; //旋转结束是否回弹
private defaultAngle = 0//360 / WheelCount / 2; //修正默认角度
private singleAngle: number = 360 / WheelCount; //每个齿轮角度
private targeAngle = 0; //目标指定的角度
private finalAngle = 0; //最终结果指定的角度
private needRoAngle = 0;