Creator 轉(zhuǎn)盤組件實(shí)現(xiàn)

export default class UILotteryPanel extends UI 
{
    
    @property(cc.Node) btn_start : cc.Node = null;

    @property(cc.Node) btn_close : cc.Node = null;

    @property(cc.Node) lotteryNode : cc.Node = null;
    
    
     private isRun = false; //是否運(yùn)行

    private isStop = false; //準(zhǔn)備停止

    private isSub = false; //是否開始減速

    private startAngle = 0; //初始轉(zhuǎn)盤差值

    private curSpeed = 0;

    private addSpeed = 800; //second/px
    
    private addSpeedTime = 1; //加速時(shí)間

    private subSpeedTime = 1; //減速時(shí)間

    private runMinTime = 2; //轉(zhuǎn)盤最小運(yùn)行時(shí)間

    
    
    //開啟轉(zhuǎn)盤
    public StartLottery()
    {
        this.isRun = true;
    }
    
    //停止轉(zhuǎn)盤
    public StopLottery(message)
    {
        let list = GameConfig.Instance.GetLotteryList(); //配置表
        if(message.rewardId < 1 || message.rewardId > list.length)
        {
            console.error("抽獎(jiǎng)下標(biāo)越界");
            return;
        }
        let info = list[message.rewardId-1]; //取配置
        if(info == null)
        {
            console.error("抽獎(jiǎng)配表生效");
        }
        this.reawrdInfo = info;
        this.endIdx = message.rewardId;
        console.log( "結(jié)束 :"+ this.endIdx);
        this.isStop = true;
    }
    
    //重置轉(zhuǎn)盤狀態(tài)
    public ResetLottery()
    {
        this.curSpeed = 0;
        this.isRun = false;
        this.isStop = false;
        this.isSub = false;
        this.timer = 0;
        this.endOffset = 0;
        //動(dòng)畫狀態(tài)重置
        this.tempRotation = 0;
    }
    
    
    private timer = 0;  //計(jì)時(shí)器
    private endIdx = 1; //結(jié)束點(diǎn)
    private endOffset = 0; //結(jié)束點(diǎn)偏移
    private middleOffset = 0; //與中心點(diǎn)偏移值 補(bǔ)間角度 (在規(guī)定時(shí)間內(nèi),使指針指向中心點(diǎn))
    update(dt)
    {
        if(this.isRun)
        {
            if(this.isStop && this.timer >= this.runMinTime)  //收到抽獎(jiǎng)通知 且 時(shí)間達(dá)到最小轉(zhuǎn)盤時(shí)間 開始找合適位置停下
            {
                if(this.endOffset == 0)
                {
                    this.GetStopOffset();
                }
                let endAngle = ((this.endIdx * -45) + this.startAngle)%360;//找到目標(biāo)位置停下
                if(endAngle == 0)
                {
                    endAngle = -360;
                }
                //使用勻減速運(yùn)動(dòng)算出位移 剂跟,然后到達(dá)減速點(diǎn)開始減速 S = vt - (a * math.pow(t,2))/2
                let endPoint = (this.lotteryNode.angle - this.endOffset) % 360;
                //因?yàn)槭墙嵌仁沁f增的现拒,所以判斷界限這邊給剛進(jìn)入的點(diǎn)設(shè)置為30 而不是45朝墩,設(shè)置為45合冀,則可能出現(xiàn)指針剛好停在界限不遠(yuǎn)處
                //若區(qū)間設(shè)置的太小窟却,當(dāng)速度值過(guò)快時(shí)刽酱,則可能出現(xiàn)無(wú)法找到區(qū)間臭蚁,多跑很多圈的情況
                //console.log(endPoint);
                // -100                             -55
                if(endPoint > endAngle && endPoint < endAngle + 45 && !this.isSub)
                {
                    this.isSub = true;
                    console.error("當(dāng)前速度:" + this.curSpeed);
                    //正數(shù)表示
                    this.middleOffset = endPoint - (endAngle + 19); //-22.5 -0 -45  最終位置減去中點(diǎn)位置 結(jié)果若為正數(shù)那么未旋轉(zhuǎn)到位载城, 負(fù)數(shù)說(shuō)明旋轉(zhuǎn)過(guò)頭
                    console.error("middleOffset : " + this.middleOffset);
                    this.curSpeed += this.middleOffset; //速度加上偏移值
                    //console.log("開始減速 : " + this.lotteryNode.rotation);
                }
                if(this.isSub) //開始減速
                {
                    this.curSpeed -= (this.addSpeed) * dt;
                    if(this.curSpeed<=0)
                    {
                        //轉(zhuǎn)盤完全停止 彈窗
                        //this.lotteryNode.angle -= this.middleOffset;
                        UIEventListener.Get(this.btn_start).SetAvailable(true);
                        //彈窗
                        this.ResetLottery();
                        let pop = LayoutMrg.Instance.GetLogicModule<LotteryPopModule>(LayoutName.S_LottertPopPanel);
                        if(pop)
                        {   
                            pop.LoadUI(UIPath.S_LottertPopPanel,AssetType.eUIModule,()=>
                            {
                                pop.UpdatePanel(this.reawrdInfo);

                                if(this.reawrdInfo.type < 4)  //金幣 鉆石 分紅刷新
                                {
                                    console.error("刷新大廳界面展示");
                                    //Player.Instance.playerInfo.diamond += this.reawrdInfo.rewardNum;
                                    let main = LayoutMrg.Instance.GetLogicModule<MainModule>(LayoutName.S_MainPanel);
                                    if(main && main.IsShow())
                                    {
                                        main.UpdateTopBar();
                                    }
                                }
                                this.UpdateDouble();
                            })
                        }
                        return;
                    }
                }
            }
            else
            {
                if(this.timer <= this.addSpeedTime) //加速階段
                {
                    this.curSpeed += this.addSpeed * dt;
                }
            }

            this.lotteryNode.angle -= this.curSpeed * dt;
            this.lotteryNode.angle %= 360;
            if(this.lotteryNode.angle == 0)
            {
                this.lotteryNode.angle = -360;
            }

            this.timer += dt;
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肌似,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诉瓦,更是在濱河造成了極大的恐慌川队,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬澡,死亡現(xiàn)場(chǎng)離奇詭異固额,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)煞聪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門斗躏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人昔脯,你說(shuō)我怎么就攤上這事啄糙。” “怎么了栅干?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵迈套,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我碱鳞,道長(zhǎng)桑李,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任窿给,我火速辦了婚禮贵白,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崩泡。我一直安慰自己禁荒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布角撞。 她就那樣靜靜地躺著呛伴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谒所。 梳的紋絲不亂的頭發(fā)上热康,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音劣领,去河邊找鬼姐军。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奕锌。 我是一名探鬼主播著觉,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惊暴!你這毒婦竟也來(lái)了饼丘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缴守,失蹤者是張志新(化名)和其女友劉穎葬毫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屡穗,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贴捡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了村砂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烂斋。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖础废,靈堂內(nèi)的尸體忽然破棺而出汛骂,到底是詐尸還是另有隱情,我是刑警寧澤评腺,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布帘瞭,位于F島的核電站,受9級(jí)特大地震影響蒿讥,放射性物質(zhì)發(fā)生泄漏蝶念。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一芋绸、第九天 我趴在偏房一處隱蔽的房頂上張望媒殉。 院中可真熱鬧,春花似錦摔敛、人聲如沸廷蓉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桃犬。三九已至,卻和暖如春行楞,著一層夾襖步出監(jiān)牢的瞬間攒暇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工敢伸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恒削。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓池颈,卻偏偏與公主長(zhǎng)得像尾序,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躯砰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容