From 3b1c8b8a8095e673e54abc65c59c94e23dc72e5d Mon Sep 17 00:00:00 2001 From: oc Date: Sat, 30 Mar 2019 22:08:15 +0800 Subject: [PATCH] Fix animate async --- libs/actions.js | 4 ++-- libs/control.js | 23 ++++++++++------------- libs/events.js | 6 +++++- libs/maps.js | 16 ++++++---------- 4 files changed, 23 insertions(+), 26 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index ad1c3c1d..90a42d46 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -717,7 +717,7 @@ actions.prototype._sys_keyDownCtrl = function () { } if (core.status.event.id == 'action' && core.status.event.data.type == 'sleep' && !core.status.event.data.current.noSkip) { - if (core.timeout.sleepTimeout && Object.keys(core.animateFrame.asyncId).length == 0) { + if (core.timeout.sleepTimeout && !core.hasAsync()) { clearTimeout(core.timeout.sleepTimeout); core.timeout.sleepTimeout = null; core.doAction(); @@ -752,7 +752,7 @@ actions.prototype._sys_longClick_lockControl = function (x, y) { // 长按可以跳过等待事件 if (core.status.event.id == 'action' && core.status.event.data.type == 'sleep' && !core.status.event.data.current.noSkip) { - if (core.timeout.sleepTimeout && Object.keys(core.animateFrame.asyncId).length == 0) { + if (core.timeout.sleepTimeout && !core.hasAsync()) { clearTimeout(core.timeout.sleepTimeout); core.timeout.sleepTimeout = null; core.doAction(); diff --git a/libs/control.js b/libs/control.js index fa0eaf5a..fce75b34 100644 --- a/libs/control.js +++ b/libs/control.js @@ -169,25 +169,22 @@ control.prototype._animationFrame_animate = function (timestamp) { if (timestamp - core.animateFrame.animateTime < 50 || !core.status.animateObjs || core.status.animateObjs.length == 0) return; core.clearMap('animate'); // 更新帧 - var animateObjs = []; - for (var i=0;i 0 || (core.status.animateObjs || []).length > 0; +} + ////// 跟随 ////// events.prototype.follow = function (name) { core.status.hero.followers = core.status.hero.followers || []; diff --git a/libs/maps.js b/libs/maps.js index 9d05a272..bc874952 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -1832,18 +1832,17 @@ maps.prototype.drawAnimate = function (name, x, y, callback) { // 播放音效 core.playSound(animate.se); - var animateId = parseInt(Math.random() * 100000000); + var id = setTimeout(null); core.status.animateObjs.push({ + "id": id, "animate": animate, "centerX": centerX, "centerY": centerY, "index": 0, - "id": animateId, "callback": callback }); - core.animateFrame.asyncId[animateId] = true; - return animateId; + return id; } ////// 绘制动画的某一帧 ////// @@ -1881,7 +1880,6 @@ maps.prototype.stopAnimate = function (id, doCallback) { for (var i = 0; i < core.status.animateObjs.length; i++) { var obj = core.status.animateObjs[i]; if (obj.id == id) { - delete core.animateFrame.asyncId[obj.id]; if (doCallback) { (function (callback) { setTimeout(function () { @@ -1890,10 +1888,8 @@ maps.prototype.stopAnimate = function (id, doCallback) { })(obj.callback); } } - core.status.animateObjs.splice(i, 1); - if (core.status.animateObjs.length == 0) { - core.clearMap('animate'); - } - break; } + core.status.animateObjs = core.status.animateObjs.filter(function (x) { return x.id != id }); + if (core.status.animateObjs.length == 0) + core.clearMap('animate'); }