Files
youlegames/codes/games/client/Projects/majiang_jx/js/DIY/DIYA.js
2026-02-04 23:47:45 +08:00

671 lines
20 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
默认动画:
放大缩小 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
//}
//}