动画 叠蛋糕
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);
}