671 lines
20 KiB
JavaScript
671 lines
20 KiB
JavaScript
/*
|
||
默认动画:
|
||
|
||
放大缩小 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, 1, 0);
|
||
//}else 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
|
||
//}
|
||
//}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|