layabox动画第一次编写

动画 叠蛋糕

module hf{
    export class FoldCakesAct extends BaseAct{
        private ui:ui.act.FoldCakes.FoldCakesActUI;

        private _anim: AnimationSKe;

        private _aid:number = 180;
        private _data: any;
        private _animPath: string = "assets/skeleton/act/foldCakes/zhounianqing.sk";
        private isPlaying:boolean;
        private index:number;
        private canGetIndex:number = -1;//领取的索引
        private num:number =-1;//当前
        constructor(aid:number){
            super(new ui.act.FoldCakes.FoldCakesActUI);
            this.ui = this.skin as ui.act.FoldCakes.FoldCakesActUI;
            this.aid = aid;
            this.ui.goChongzhiBtn.on(Laya.Event.CLICK, this, this.goCHongzhi);
            this.ui.foldBtn.on(Laya.Event.CLICK, this, this.onFoldCake);
            this._anim = new AnimationSKe(this._animPath);
            // this._anim.x = 57;
            // this._anim.y = 400;
            this._anim.x = 102;
            this._anim.y = 466;
            this._anim._height =329;
            this._anim.scaleX=0.8;
            this._anim.stop();
            this.ui.addChild(this._anim);
            this.ui.addChild(this.ui.tableBg);
            this.ui.addChild(this.ui.foldBtn);
            this._anim.play(0, false);
            XHR().Post({"file":"petpk","cmd":"activity", "aid":this._aid,"subcmd":"query"}, this, this.OnDataRet);
            this.ui.giftList.scrollBar.visible = false;//隐藏滚动条
            this.ui.giftList.renderHandler = new Handler(this, this.onListRender, null, false);
            this.ui.giftList.array = [];
            this.UpdateUI();
            
        }
        
        private OnDataRet(value:any)
        {
            if(value.result == 0)
            {
                this._data = value;
                this.UpdateUI();
                this.playMakeAnim();
                Facade.callCommand(new SyncChangeCmd(value, false, true));
            }
            else
            {   
                WeakTips.show(value["msg"]);
            }
        }
        private UpdateUI()
        {
            if(this._data == null)
            {
                return;
            }
            this.ui.costTxt.text = this._data.act_charge+" / 259200";
            this.ui.giftList.array = this._data.act_packet_list;
            this.canGetIndex = -1;
            var sum:number =0;
            this.num = 0;
            for(var i=0;i<this._data.act_packet_list.length;i++)
            {
                if(this._data.act_charge>=this._data.act_packet_list[i].limit)//&&this._data.act_packet_list[i].status == 1
                {
                    if(this._data.act_packet_list[i].status == 1)
                    {
                        this.canGetIndex = this.canGetIndex==-1?i:this.canGetIndex;
                    }
                    else
                    {
                        this.num++;
                    }
                    
                }
                sum+=this._data.act_packet_list[i].status;
            }
            if(sum==0)//没有充值/领取过
            {
                this.ui.foldBtn.gray = true;
            }
            else
            {
                this.ui.foldBtn.gray = false;
            }
            // this.playMakeAnim();
            //跳转到最新的没有领取的地方
            // this.callLater(this.signLatest,[this._data.act_packet_list]);
        }
        private signLatest(ary:any):void{
           var point=0;
           for(var i=0;i<ary.length;i++){
               if(!ary[i]){
                   point=i;
                   break;
               }
           }
           var point1=point;
           for(var i=0;this._data.act_packet_list&&i<this._data.act_packet_list.length;i++){
               if(!this._data.act_packet_list[i]){
                   point1=i;
                   break;
               }
           }
           point = Math.min(point, point1);
           this.ui.giftList.tweenTo(point);
        }
        private onListRender(item:FoldCakesChongzhiItem, index:number): void
        {
            item.doRender(this.ui.giftList.array[index], index, this.aid,this._data.act_charge);
        }
        private goCHongzhi():void
        {
            Facade.callCommand(new OpenVipBoxCommand(1));
        }
        private onFoldCake(): void
        {
             if(this.canGetIndex==-1) return;
            //  XHR().Post({"cmd":"activity","file":"petpk","aid":this._aid,"subcmd":"act_get","index":this.canGetIndex}, this, this.makeHandler);
             XHR().Post({"cmd":"activity","file":"petpk","aid":this._aid,"subcmd":"act_get"}, this, this.makeHandler);
        }

        private makeResult: any;
        private makeHandler(value:any): void
        {
            if(value.result == 0)
            {
                this._data = value;
                this.UpdateUI();
                this.playMakeAnim();
                // Facade.callCommand(new SyncChangeCmd(value, false, true));
                Facade.callCommand(new SyncChangeCmd(value));
            }
            else
            {
                WeakTips.show(value.msg);
            }
        }
        //播放制造动画
        private playMakeAnim(): void
        {
            this.isPlaying = true;
            let animNames:Array<string> = ["","dangao01","dangao02","dangao03","dangao04","dangao05","dangao06","dangao07","dangao08"];
            this._anim.visible = true;
            // this.canGetIndex = index;
            
            this.UpdateUI();
            if(this.num ==0)
            {
                this._anim.visible=false;
            }
            if(this.num < 5)
            {
                this._anim.play(animNames[this.num],  false, false, 0);
            }
            else
            {
                this._anim.play(animNames[(this.num-4)%4+4],  false, false, 0);
            }
        }
        
        public destroy(): void 
        {
            this.ui.foldBtn.off(Laya.Event.CLICK, this, this.onFoldCake);
            Laya.loader.clearRes("assets/skeleton/act/foldCakes/zhounianqing.sk");
            this._anim.destroy();
            this._anim = null;
            super.destroy();
            
        }
    }
    export class FoldCakesChongzhiItem extends ui.act.FoldCakes.FoldCakesChongzhiItemUI
    {
        private _subData: any;
        private _aid:number;
        private _index:number;
        private _act_charge:number;
         constructor()
        {
            super();
        }
        public doRender(subData:any, index:number,  aid:number,act_charge:number): void
        {
            this._subData = subData;
            this.giftCostTxt.text =subData["limit"];
            this._act_charge =act_charge;
            var len = this._subData.items.items.length;
            if(len > 1)//礼包包含多个物品,用默认icon1,,,,,,icon是一个物品的skin
            {
                this.icon.visible =false;
                this.icon1.visible=true;
                this.icon1.on(Laya.Event.CLICK, this, this.clickTips);
            }
            else if(len ==1)
            {
                this.icon.visible =true;
                this.icon1.visible = false;
                CommonGift.showCommonGift(subData['items'], this.icon, 60, 5, "ui/comp/goodsbg2.png");
            }
            // if(subData["limit"]==1980)
            // {
            //     this.icon.visible =true;
            //     this.icon1.visible = false;
            //     CommonGift.showCommonGift(subData['items'], this.icon, 60, 5, "ui/comp/goodsbg2.png");
            // }
            if(this._act_charge  >= subData["limit"] && subData["status"]==0)//已领取
            {
                this.flag.visible = true;
                this.black.visible = true;
            }
            else
            {
                this.flag.visible = false;
                this.black.visible = false;
            }
            if(this._act_charge  < subData["limit"])
            {
                this.black.visible = true;
            }
        }
        private clickTips() 
        {
            var tipsData = {};
            //转换坐标点为全局坐标点   
            var pos: laya.maths.Point;
             pos = this.icon1.localToGlobal(new laya.maths.Point(0, 0));
            var strMsg: string = "";
            for (var i: number = 0; i < this._subData["items"]["items"].length; i++) {
                strMsg += this._subData["items"]["items"][i]["name"] + "x" + (this._subData["items"]["items"][i]["num"] ? this._subData["items"]["items"][i]["num"] : (this._subData["items"]["items"][i]["hours"] / 24 + "天"));
                if (i != this._subData["items"]["items"].length - 1) {
                    strMsg += "\n";
                }
            }
            tipsData["name"] ="礼包物品包含:";
            tipsData["desc"] = strMsg;
            Tips.show(tipsData, pos);
        }
        private ShowGiftTips(value:any):void
        {
            if (value.result == 0)
            {
                var syncCmd = new SyncChangeCmd(value,false,true);
                Facade.callCommand(syncCmd);
            }
            else
            {
                WeakTips.show(value.msg);
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述

this._anim.x = 102;
this._anim.y = 466;//动画的坐标
this._anim._height =329;
this._anim.scaleX=0.8;//动画的尺寸缩放
this._anim.stop();
this.ui.addChild(this._anim);//把动画布局到ui视图上,这里就是把动画放到图层上
this.ui.addChild(this.ui.tableBg);//因为之前的桌面bg和领取按钮的优先级高于动画,所以在加载动画之后重新把这两个组件布局到ui视图管理上
this.ui.addChild(this.ui.foldBtn);
this._anim.play(0, false);//播放动画

实现效果,这里是静态图片不是GIF没法看动画完整效果
在这里插入图片描述


layabox使用动画资源 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200630144007620.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTA1NjgwNw==,size_16,color_FFFFFF,t_70) ①导入动画资源,首先找到资源的位置

在这里插入图片描述
在这里插入图片描述
②导入之后会生成sk文件和新的png,然后如果png大可以拿到TinyPng网站进行压缩,否则会出现资源加载的问题。如卡顿。
③然后把生成的资源放到指定位置中进行存储,在编辑器中找到该动画的指定位置,就能进行正常使用了。

在这里插入图片描述
④使用规则要参考json中animation的展示
在这里插入图片描述
let animNames:Array<string>这个数组中存放的是动画名称, 这个动画的播放是4个一循环.,所以计算是在4个以内正常播放,超过四个进行计算即可显示!

 let animNames:Array<string> = ["","dangao01","dangao02","dangao03","dangao04","dangao05","dangao06","dangao07","dangao08"];
this._anim.visible = true;
// this.canGetIndex = index;

this.UpdateUI();
if(this.num ==0)
{
    this._anim.visible=false;
}
if(this.num < 5)
{
    this._anim.play(animNames[this.num],  false, false, 0);
}
else
{
    this._anim.play(animNames[(this.num-4)%4+4],  false, false, 0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值