/* 默认动画: 放大缩小 zoom 参数:目标倍数,时间(不是秒,是一个值,自己调一调) 旋转 rotate 参数:目标倍数,时间(不是秒,是一个值,自己调一调) 定向移动 move 参数:方向,距离,时间(不是秒,是一个值,自己调一调) 定点移动 moveTo 参数:目标位置[100,100],时间(不是秒,是一个值,自己调一调) 是否正在播放 if (!AM.is_play(5)) { 同时播放:边放大,边旋转 放大到200 AM.add(5).bfunc(function(){ 该链式动画开始之前执行 }).zoom(200,35).func(function(){ 该链式动画完成时执行,此时不能再次执行同一ID的动画 }).start(); 同时旋转30度 AM.new(5).bfunc(function(){ 该链式动画开始之前执行 }).rotate(get_self(5,34)+30,30).func(function(){ 该链式动画完成时执行,此时不能再次执行同一ID的动画 }).start(); } 是否正在播放 if (!AM.is_play(5)) { 逐步播放:先放大到200,然后旋转30度 先放大到200,然后旋转30度 AM.add(5).bfunc(function(){ 该链式动画开始之前执行 }).zoom(200,35).rotate(get_self(5,34)+30,30).func(function(){ 该链式动画完成时执行,此时不能再次执行同一ID的动画 }).start(); }; 清除所有动画 AM.clear() 一个参数: 空:默认为false,会直接变为理想状态 true :回到未执行完的动画的初始状态。 AM.remove() 两个参数: 一:id:清除某ID的动画 二:空:默认为false,会直接变为理想状态 true :回到未执行完的动画的初始状态。 */ function HAnimation(desc){ this.desc=desc||""; var item=[];//动画序列 var playID=[];//l var deploy=0;//延迟 var id=0, duration=0; var king={}; var currentPlay=null; var currentP=[]; var pos=[]; var opos=[]; var self=this; self.isPlaying=0; var toO=false; var toend=false; var repp=false; var func=function(){}; var bfunc=function(){}; var result={} //var one_by_one={ //id:0, //item:[], //currentPlay:null, //isPlaying:0, //pos:[], //opos:[], //toO:false, //repp:false, //func:function(){}, //} this.register=function(obj){ if (self.isPlaying == 1) { //console.log("该动画已经在运行了"); return king; } id = obj; pos = []; opos = []; currentPlay = null; currentP = []; self.isPlaying = 0; pos = [get_self(id, 18, 0, 0), get_self(id, 19, 0, 0)]; opos = [get_self(id, 18, 0, 0), get_self(id, 19, 0, 0)]; return king; }; king.bfunc=function(funcc){ bfunc = funcc||bfunc; return king; }; king.func=function(funcc){ func = funcc||func; return king; }; king.repeat=function(self){ if (self==0) { stop(); } repp=true; return king; }; this.set_end=function(end){ toend=end; } this.set_toO=function(O){ toO=O; }; king.set_end=function(end){ toend=end; }; king.set_toO=function(O){ toO=O; }; //预设动画:左移,右移,上移,下移,定向移动 king.wait=function(time,func){ var tim=time||0; var func=func||function(){}; var otime=tim; var piecea=function(otime){ if (time==0) { time=otime; func(); return 2; } time=time-1; return 1; } item[item.length]={id:item.length,state:0,argu:arguments,func:piecea,pos:pos} return king; } king.path=function(mpos,time,func){ result[18]=mpos[0] result[19]=mpos[1] var pp=Math.abs(pos[1]-mpos[1])/time; console.log(pos[1],mpos[1],time,pp) var path=function(mpos){ var A=new Point(pos[0],pos[1]); var B=new Point(mpos[0],mpos[1]); if (get_self(id,18)mpos[0]){ set_self(id, 18,pp, 2, 0); } var y; if (B.x==A.x) { var y=B.y; }else{ y=func(A,B,get_self(id, 18)); } set_self(id, 19,y, 0, 0); // get_self(id, 18, 0, 0)==mpos[0]&&get_self(id, 19, 0, 0)==mpos[1] if (Math.abs(get_self(id, 18, 0, 0)-mpos[0])<10&&Math.abs(get_self(id, 19, 0, 0)-mpos[1])<10) { set_self(id,18,mpos[0],0,0); set_self(id,19,mpos[1],0,0); return 2; } return 1; } item[item.length]={id:item.length,state:0,argu:arguments,func:path,pos:pos} return king; } king.moveTo=function(mpos,time){ var pp; if (pos[0]!=mpos[0]) { pp=Math.abs(pos[0]-mpos[0])/time; }else{ pp=Math.abs(pos[1]-mpos[1])/time; } result[18]=mpos[0] result[19]=mpos[1] var moveTo=function(mpos){ var A=new Point(pos[0],pos[1]); var B=new Point(mpos[0],mpos[1]); if ((B.y-A.y)==0&&(B.x-A.x)==0) { return 2; } if (get_self(id,18)mpos[0]){ set_self(id, 18,pp, 2, 0); } var y; if (B.x==A.x) { var y=B.y; }else{ y=(B.y-A.y)/(B.x-A.x)*(get_self(id, 18, 0, 0)-A.x)+A.y; } set_self(id, 19,y, 0, 0); //if (get_self(id,19)mpos[1]){ ////console.log("MOVETO"+get_self(id,19)); //set_self(id, 19,1, 2, 0); //} if (Math.abs(get_self(id, 18, 0, 0)-mpos[0])<10&&Math.abs(get_self(id, 19, 0, 0)-mpos[1])<10) { //console.log("MOVETO",mpos[0],mpos[1]); set_self(id,18,mpos[0],0,0); set_self(id,19,mpos[1],0,0); return 2; } return 1; } item[item.length]={id:item.length,state:0,argu:arguments,func:moveTo,pos:pos} return king; } king.move=function(type,mile,time){ if (type=='right') { result[18]=pos[0]+mile }else if (type=='left') { result[18]=pos[0]-mile }else if (type=='up') { result[19]=pos[1]-mile }else if (type=='down') { result[19]=pos[1]+mile } var pp=mile/time; var moveGo=function(type,mile){ ////console.log(type); if (type=='right') { set_self(id, 18,pp, 1, 0); if ((get_self(id, 18, 0, 0)-pos[0])>= mile) { pos[0]=pos[0]+mile;//-get_self(id, 20, 0, 0); set_self(id,18,pos[0],0,0); //console.log('right'+id); return 2; } }else if (type=='left') { set_self(id, 18,pp, 2, 0); if ((pos[0]-get_self(id, 18, 0, 0))>= mile) { pos[0]=pos[0]-mile; //console.log('left'+id); set_self(id,18,pos[0],0,0); return 2; } }else if (type=='up') { set_self(id, 19,pp, 2, 0); if ((pos[1]-get_self(id, 19, 0, 0))>= mile) { pos[1]=pos[1]-mile; set_self(id,19,pos[1],0,0); //console.log('up'+id); return 2; } }else if (type=='down') { set_self(id, 19,pp, 1, 0); if ((get_self(id, 19, 0, 0)-pos[1])>= mile) { pos[1]=pos[1]+mile; set_self(id,19,pos[1],0,0); //console.log('down'+id); return 2; } } return 1; } item[item.length]={id:item.length,state:0,argu:arguments,func:moveGo,pos:pos} return king; } king.zoom=function(beishu,time){ //console.log("zoomBB"); var pp; console.log(beishu) if (beishu<0) { pp=-beishu/time; }else{ pp=beishu/time; } result[33]=beishu var zoom=function(beishu){ //console.log(beishu); if(beishu>=get_self(id,33,0,0)){ set_self(id,33,pp,1,0); if (get_self(id,33,0,0)>=beishu) { //console.log("zoomBB"); set_self(id,33,beishu,0,0); return 2; } }else{ set_self(id,33,pp,2,0); if (get_self(id,33,0,0)<=beishu) { //console.log("zoomSS"); set_self(id,33,beishu,0,0); return 2; } } return 1; } item[item.length]={id:item.length,state:0,argu:arguments,func:zoom,pos:pos} return king; } king.rotate=function(beishu,time){ //console.log("rotateAA"); var pp; if (beishu<0) { pp=-beishu/time; }else if (beishu>0){ pp=beishu/time; }else{ pp=(0-get_self(id,34,0,0))/time; } result[34]=beishu var rotate=function(beishu){ if(beishu>=get_self(id,34,0,0)){ set_self(id,34,pp,1,0); if (get_self(id,34,0,0)>=beishu) { //console.log("rotateAA"); set_self(id,34,beishu,0,0); return 2; } }else{ set_self(id,34,pp,2,0); if (Math.abs(get_self(id,34,0,0))>=Math.abs(beishu)) { //console.log("rotateBB",get_self(id,34,0,0),beishu); set_self(id,34,beishu,0,0); return 2; } } return 1; } item[item.length]={id:item.length,state:0,argu:arguments,func:rotate,pos:pos} return king; } king.alpha=function(beishu,time){ //console.log("rotateAA"); var pp; var last=result[35]||255 if (result[35]!=undefined&&result[35]==0) { last=0; } pp=Math.abs(last-beishu)/time; console.log("pppp",last) result[35]=beishu var alpha=function(beishu){ if(beishu>=get_self(id,35,0,0)){ set_self(id,35,pp,1,0); if (get_self(id,35,0,0)>=beishu) { //console.log("rotateAA"); set_self(id,35,beishu,0,0); return 2; } }else{ set_self(id,35,pp,2,0); if (get_self(id,35,0,0)<=beishu) { //console.log("rotateBB",get_self(id,34,0,0),beishu); set_self(id,35,beishu,0,0); return 2; } } return 1; } item[item.length]={id:item.length,state:0,argu:arguments,func:alpha,pos:pos} return king; } king.start=function(open){ if (item.length==0) { return } //set_self(id,18,opos[0],0,0); //set_self(id,19,opos[1],0,0); //set_self(id,34,0,0,0); //set_self(id,33,100,0,0); currentPlay = null; self.isPlaying = 1; bfunc(); set_self(id, 57, 1, 0, 0);//开启定时器 } this.start=function(open){ if (item.length==0) { return } //set_self(id,18,opos[0],0,0); //set_self(id,19,opos[1],0,0); //set_self(id,34,0,0,0); //set_self(id,33,100,0,0); currentPlay = null; self.isPlaying = 1; bfunc(); set_self(id, 57, 1, 0, 0);//开启定时器 } var stop=function(){ if (toO) { set_self(id,18,opos[0],0,0); set_self(id,19,opos[1],0,0); set_self(id,34,0,0,0); set_self(id,33,100,0,0); } currentPlay = null; self.isPlaying = 0; item = []; } this.show=function(){ //console.log(item); } this.end=function(O){ toO=O; if (O==undefined) { toO=false; } for (var key in result) { set_self(id,parseInt(key),parseInt(result[key]),0,0); //console.log("id=="+id+" key:"+key+",desc:"+result[key]); } stop(); func(); } this.ontimer=function(gameid,spid){ if (spid!=id) { return; } if (toend) { if (toO) { }else{ if (item.length!=0) { for (var key in result) { set_self(id,parseInt(key),parseInt(result[key]),0,0); //console.log("id=="+id+" key:"+key+",desc:"+result[key]); } //console.log(result) } } stop(); func(); } if (item.length==0) { return; } if (currentPlay==null) { currentPlay=item[0]; currentPlay.state=1; } if (currentPlay.state==2) {//播放结束 if (currentPlay.id