/* 默认动画: 放大缩小 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, 1, 0); } else 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, 1, 0); } else 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 < item.length - 1) { currentPlay = item[currentPlay.id + 1]; currentPlay.state = 1; } else { if (repp == false) { ////console.log(item); //console.log("执行结果:"); stop(); func(); return; } else { 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); } pos = [opos[0], opos[1]]; currentPlay = item[0]; currentPlay.state = 1; } } } ////console.log(spid); if (spid == id) { if (currentPlay.state == 1) { var state = currentPlay.func.apply(null, currentPlay.argu);//Array.prototype.slice.call(arguments, 0)); currentPlay.state = state; } } }; }; /* */ //var HA=app.register("Animation1",new HAnimation("1")); //var HAn=app.register("Animation2",new HAnimation("2")); //HA.item=[]; //HA.add=function(desc){ //HA.item.push(new HAnimation(desc)) //} //HA.get=function(pos){ //if (!HA.item[pos]) { //HA.item[pos]=new HAnimation("") //} //return HA.item[pos] //} function AManager() { var self = this; this.animantions = {}; var king = {}; this.add = function (id) { var animation; if (!self.animantions[id]) { self.animantions[id] = []; animation = new HAnimation("") //console.log(animation) self.animantions[id].push(animation) } animation = self.animantions[id][self.animantions[id].length - 1] return animation.register(id) } this.new = function (id) { animation = new HAnimation("") self.animantions[id].push(animation) return animation.register(id) } this.action = function (id) { if (self.animantions[id]) { animation = self.animantions[id] for (var i = 0; i < animation.length; i++) { animation[i].start(); } } } this.get = function (id) { if (self.animantions[id]) { return self.animantions[id] } return; //throw "该 id=="+id+" 不存在或者没有动画列表" } this.is_play = function (id) { //this.get(id) animation = this.get(id); if (animation == undefined) { return false; } for (var i = 0; i < animation.length; i++) { if (animation[i].isPlaying == 1) { return true; } } return false; } this.cls_id = function (id) { if (self.animantions[id]) { set_self(id, 57, 0, 0, 0); delete self.animantions[id]; } } this.remove = function (id, end) { if (self.animantions[id]) { animation = self.animantions[id]; for (var i = 0; i < animation.length; i++) { animation[i].end(end); } delete self.animantions[id]; } } this.mremove = function (id) { delete self.animantions[id]; } this.clear = function (end) { if (end == undefined) { end = false } for (var anim in self.animantions) { animation = self.animantions[anim]; for (var i = 0; i < animation.length; i++) { animation[i].end(end); } } self.animantions = {}; } this.clear_exrepp = function (end) { if (end == undefined) { end = false } for (var anim in self.animantions) { animation = self.animantions[anim]; not = 0; for (var i = 0; i < animation.length; i++) { if (animation[i].get_repeat() == true) { not = animation; break; } } console.log(not); if (not == 0) { for (var i = 0; i < animation.length; i++) { animation[i].end(end); } delete self.animantions[anim]; } } } this.ontimer = function (gameid, spid) { if (self.animantions[spid] == undefined) { //if (spid!=800&&spid!=801&&spid!=802&&spid!=803&&spid!=804&&spid!=805) { //set_self(spid, 57, 0, 0, 0); //} // set_self(spid, 57, 0, 0, 0); //console.log(spid); return; } animation = self.animantions[spid]; for (var i = 0; i < animation.length; i++) { if (animation[i].isPlaying == 1) { return; } } delete self.animantions[spid]; set_self(spid, 57, 0, 0, 0); } this.ex = function () { var alist = [] for (var anim in self.animantions) { animation = self.animantions[anim]; for (var i = 0; i < animation.length; i++) { alist.push(animation[i]); } } return alist } } AM = app.register_manager("AManager", new AManager()); //var AManager={ //animantions:{}, //add:function(id){ //if (!this.animantions[id]) { //animation=new HAnimation("") //this.animantions[id]=animation //}else{ //this.animantions[id] //} //return animation //} //}