replay from save
This commit is contained in:
parent
e6ccdf75ed
commit
75e5c8538e
@ -106,7 +106,7 @@ actions.prototype.keyDown = function(keyCode) {
|
|||||||
this.keyDownToolbox(keyCode);
|
this.keyDownToolbox(keyCode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (core.status.event.id=='save' || core.status.event.id=='load') {
|
if (core.status.event.id=='save' || core.status.event.id=='load' || core.status.event.id=='replayLoad') {
|
||||||
this.keyDownSL(keyCode);
|
this.keyDownSL(keyCode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -138,6 +138,9 @@ actions.prototype.keyDown = function(keyCode) {
|
|||||||
this.keyDownCursor(keyCode);
|
this.keyDownCursor(keyCode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (core.status.event.id=='replay') {
|
||||||
|
this.keyDownReplay(keyCode);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!core.status.played) {
|
if(!core.status.played) {
|
||||||
@ -237,7 +240,7 @@ actions.prototype.keyUp = function(keyCode, fromReplay) {
|
|||||||
this.keyUpToolbox(keyCode);
|
this.keyUpToolbox(keyCode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (core.status.event.id=='save' || core.status.event.id=='load') {
|
if (core.status.event.id=='save' || core.status.event.id=='load' || core.status.event.id=='replayLoad') {
|
||||||
this.keyUpSL(keyCode);
|
this.keyUpSL(keyCode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -269,6 +272,10 @@ actions.prototype.keyUp = function(keyCode, fromReplay) {
|
|||||||
this.keyUpCursor(keyCode);
|
this.keyUpCursor(keyCode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (core.status.event.id=='replay') {
|
||||||
|
this.keyUpReplay(keyCode);
|
||||||
|
return;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,19 +332,8 @@ actions.prototype.keyUp = function(keyCode, fromReplay) {
|
|||||||
core.ui.drawHelp();
|
core.ui.drawHelp();
|
||||||
break;
|
break;
|
||||||
case 82: // R
|
case 82: // R
|
||||||
if (core.status.heroStop) {
|
if (core.status.heroStop)
|
||||||
core.ui.drawConfirmBox("确定要回放录像吗?", function () {
|
core.ui.drawReplay();
|
||||||
core.ui.closePanel();
|
|
||||||
var hard=core.status.hard, route=core.clone(core.status.route);
|
|
||||||
core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
|
|
||||||
core.events.setInitData(hard);
|
|
||||||
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
|
||||||
core.startReplay(route);
|
|
||||||
}, true);
|
|
||||||
}, function () {
|
|
||||||
core.ui.closePanel();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 33: case 34: // PAGEUP/PAGEDOWN
|
case 33: case 34: // PAGEUP/PAGEDOWN
|
||||||
if (core.status.heroStop) {
|
if (core.status.heroStop) {
|
||||||
@ -606,7 +602,7 @@ actions.prototype.onclick = function (x, y, stepPostfix) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 存读档
|
// 存读档
|
||||||
if (core.status.event.id == 'save' || core.status.event.id == 'load') {
|
if (core.status.event.id == 'save' || core.status.event.id == 'load' || core.status.event.id=='replayLoad') {
|
||||||
this.clickSL(x,y);
|
this.clickSL(x,y);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -664,6 +660,11 @@ actions.prototype.onclick = function (x, y, stepPostfix) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (core.status.event.id == 'replay') {
|
||||||
|
this.clickReplay(x,y);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////// 滑动鼠标滚轮时的操作 //////
|
////// 滑动鼠标滚轮时的操作 //////
|
||||||
@ -1902,6 +1903,68 @@ actions.prototype.keyUpStorageRemove = function (keycode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////// 回放选择界面时的点击操作 //////
|
||||||
|
actions.prototype.clickReplay = function (x, y) {
|
||||||
|
if (x<5 || x>7) return;
|
||||||
|
var choices = core.status.event.ui.choices;
|
||||||
|
|
||||||
|
var topIndex = 6 - parseInt((choices.length - 1) / 2);
|
||||||
|
|
||||||
|
if (y>=topIndex && y<topIndex+choices.length) {
|
||||||
|
var selection = y - topIndex;
|
||||||
|
switch (selection) {
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
core.ui.closePanel();
|
||||||
|
var hard=core.status.hard, route=core.clone(core.status.route);
|
||||||
|
core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
|
||||||
|
core.events.setInitData(hard);
|
||||||
|
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
||||||
|
core.startReplay(route);
|
||||||
|
}, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
core.status.event.id = 'replayLoad';
|
||||||
|
core.status.event.selection = null;
|
||||||
|
var saveIndex = core.status.saveIndex;
|
||||||
|
var page=parseInt((saveIndex-1)/5), offset=saveIndex-5*page;
|
||||||
|
core.ui.drawSLPanel(10*page+offset);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
core.ui.closePanel();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////// 回放选择界面时,按下某个键的操作 //////
|
||||||
|
actions.prototype.keyDownReplay = function (keycode) {
|
||||||
|
if (keycode==38) {
|
||||||
|
core.status.event.selection--;
|
||||||
|
core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices);
|
||||||
|
}
|
||||||
|
if (keycode==40) {
|
||||||
|
core.status.event.selection++;
|
||||||
|
core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////// 回放选择界面时,放开某个键的操作 //////
|
||||||
|
actions.prototype.keyUpReplay = function (keycode) {
|
||||||
|
if (keycode==27 || keycode==88) {
|
||||||
|
core.ui.closePanel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var choices = core.status.event.ui.choices;
|
||||||
|
if (keycode==13 || keycode==32 || keycode==67) {
|
||||||
|
var topIndex = 6 - parseInt((choices.length - 1) / 2);
|
||||||
|
this.clickReplay(6, topIndex+core.status.event.selection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////// “虚拟键盘”界面时的点击操作 //////
|
////// “虚拟键盘”界面时的点击操作 //////
|
||||||
actions.prototype.clickKeyBoard = function (x, y) {
|
actions.prototype.clickKeyBoard = function (x, y) {
|
||||||
if (y==3 && x>=1 && x<=11) {
|
if (y==3 && x>=1 && x<=11) {
|
||||||
|
|||||||
@ -1815,6 +1815,30 @@ control.prototype.doSL = function (id, type) {
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (type == 'replayLoad') {
|
||||||
|
var data = core.getLocalStorage(id=='autoSave'?id:"save"+id, null);
|
||||||
|
if (!core.isset(data)) {
|
||||||
|
core.drawTip("无效的存档");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (data.version != core.firstData.version) {
|
||||||
|
core.drawTip("存档版本不匹配");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (data.hard != core.status.hard) {
|
||||||
|
core.drawTip("游戏难度不匹配!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var route = core.subarray(core.status.route, core.decodeRoute(data.route));
|
||||||
|
if (!core.isset(route)) {
|
||||||
|
core.drawTip("无法从此存档回放录像");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
core.loadData(data, function () {
|
||||||
|
core.startReplay(route);
|
||||||
|
core.drawTip("回退到存档节点");
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////// 同步存档到服务器 //////
|
////// 同步存档到服务器 //////
|
||||||
|
|||||||
@ -1067,6 +1067,11 @@ core.prototype.isset = function (val) {
|
|||||||
return core.utils.isset(val);
|
return core.utils.isset(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////// 获得子数组 //////
|
||||||
|
core.prototype.subarray = function (a, b) {
|
||||||
|
return core.utils.subarray(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
////// 读取一个本地文件内容 //////
|
////// 读取一个本地文件内容 //////
|
||||||
core.prototype.readFile = function (success, error, readType) {
|
core.prototype.readFile = function (success, error, readType) {
|
||||||
core.utils.readFile(success, error, readType);
|
core.utils.readFile(success, error, readType);
|
||||||
|
|||||||
18
libs/ui.js
18
libs/ui.js
@ -1132,6 +1132,14 @@ ui.prototype.drawStorageRemove = function () {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui.prototype.drawReplay = function () {
|
||||||
|
core.lockControl();
|
||||||
|
core.status.event.id = 'replay';
|
||||||
|
this.drawChoices(null, [
|
||||||
|
"从头回放录像", "从存档开始回放", "返回游戏"
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
////// 绘制分页 //////
|
////// 绘制分页 //////
|
||||||
ui.prototype.drawPagination = function (page, totalPage) {
|
ui.prototype.drawPagination = function (page, totalPage) {
|
||||||
|
|
||||||
@ -1577,7 +1585,7 @@ ui.prototype.drawSLPanel = function(index) {
|
|||||||
var strokeColor = '#FFD700';
|
var strokeColor = '#FFD700';
|
||||||
if (core.status.event.selection) strokeColor = '#FF6A6A';
|
if (core.status.event.selection) strokeColor = '#FF6A6A';
|
||||||
|
|
||||||
var name=core.status.event.id=='save'?"存档":"读档";
|
var name=core.status.event.id=='save'?"存档":core.status.event.id=='load'?"读档":core.status.event.id=='replayLoad'?"回放":"";
|
||||||
for (var i=0;i<6;i++) {
|
for (var i=0;i<6;i++) {
|
||||||
var id=5*page+i;
|
var id=5*page+i;
|
||||||
var data=core.getLocalStorage(i==0?"autoSave":"save"+id, null);
|
var data=core.getLocalStorage(i==0?"autoSave":"save"+id, null);
|
||||||
@ -1608,9 +1616,11 @@ ui.prototype.drawSLPanel = function(index) {
|
|||||||
}
|
}
|
||||||
this.drawPagination(page+1, 30);
|
this.drawPagination(page+1, 30);
|
||||||
|
|
||||||
if (core.status.event.selection)
|
if (core.status.event.id == 'save' || core.status.event.id=='load') {
|
||||||
core.setFillStyle('ui', '#FF6A6A');
|
if (core.status.event.selection)
|
||||||
core.fillText('ui', '删除模式', 48, 403);
|
core.setFillStyle('ui', '#FF6A6A');
|
||||||
|
core.fillText('ui', '删除模式', 48, 403);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -300,6 +300,17 @@ utils.prototype.isset = function (val) {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////// 获得子数组 //////
|
||||||
|
utils.prototype.subarray = function (a, b) {
|
||||||
|
if (!core.isset(a) || !core.isset(b) || !(a instanceof Array) || !(b instanceof Array) || a.length<b.length)
|
||||||
|
return null;
|
||||||
|
var na = core.clone(a), nb=core.clone(b);
|
||||||
|
while (nb.length>0) {
|
||||||
|
if (na.shift() != nb.shift()) return null;
|
||||||
|
}
|
||||||
|
return na;
|
||||||
|
}
|
||||||
|
|
||||||
////// 读取一个本地文件内容 //////
|
////// 读取一个本地文件内容 //////
|
||||||
utils.prototype.readFile = function (success, error, readType) {
|
utils.prototype.readFile = function (success, error, readType) {
|
||||||
|
|
||||||
|
|||||||
6
更新说明.txt
6
更新说明.txt
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
改变勇士行走图 √
|
改变勇士行走图 √
|
||||||
楼传器落点设置 √
|
楼传器落点设置 √
|
||||||
录像回放从任意存档点开始
|
录像回放从任意存档点开始 √
|
||||||
录像过程中允许存档
|
录像过程中允许存档
|
||||||
血网显伤 √
|
血网显伤 √
|
||||||
重置当前楼层地图core.resetMap() √
|
重置当前楼层地图core.resetMap() √
|
||||||
部分楼层不允许浏览地图 √
|
部分楼层不允许浏览地图 √
|
||||||
其他细节优化
|
其他细节优化 √
|
||||||
|
r
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
HTML5魔塔样板V2.1
|
HTML5魔塔样板V2.1
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user