diff --git a/libs/core.js b/libs/core.js index 7f0d7ff9..2b19c4e9 100644 --- a/libs/core.js +++ b/libs/core.js @@ -78,6 +78,7 @@ function core() { 'stepPostfix': [], 'mouseOutCheck': 1, 'moveStepBeforeStop': [], + 'downTime': null, // 勇士状态;中心对称飞行器 @@ -713,6 +714,9 @@ core.prototype.keyUp = function(keyCode) { if (core.status.heroStop) core.openBook(true); break; + case 65: // A + core.doSL("autoSave", "load"); + break; case 83: // S if (core.status.heroStop) core.save(true); @@ -792,9 +796,11 @@ core.prototype.ondown = function (x ,y) { core.onclick(x, y, []); return; } + + core.status.downTime = new Date(); core.status.holdingPath=1; core.status.mouseOutCheck =1; - window.setTimeout(core.clearStepPostfix); + // window.setTimeout(core.clearStepPostfix); core.saveCanvas('ui'); core.clearMap('ui', 0, 0, 416,416); var pos={'x':x,'y':y} @@ -842,8 +848,16 @@ core.prototype.onup = function () { core.status.stepPostfix=[]; core.canvas.ui.clearRect(0, 0, 416,416); core.canvas.ui.restore(); - core.onclick(posx,posy,stepPostfix); - //posx,posy是寻路的目标点,stepPostfix是后续的移动 + + // 长按 + if (!core.status.lockControl && stepPostfix.length==0 && core.status.downTime!=null && new Date()-core.status.downTime>=1000) { + core.events.longClick(); + } + else { + //posx,posy是寻路的目标点,stepPostfix是后续的移动 + core.onclick(posx,posy,stepPostfix); + } + core.status.downTime=null; } } @@ -963,6 +977,11 @@ core.prototype.onclick = function (x, y, stepPostfix) { return; } + if (core.status.event.id == 'keyBoard') { + core.events.clickKeyBoard(x,y); + return; + } + // 关于 if (core.status.event.id == 'about') { core.events.clickAbout(x,y); @@ -1783,6 +1802,9 @@ core.prototype.trigger = function (x, y) { ////// 楼层切换 ////// core.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback) { + + var displayAnimate=!(time==0); + time = time || 800; time /= 20; core.lockControl(); @@ -1815,8 +1837,8 @@ core.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback) } window.setTimeout(function () { - core.playSound('floor.mp3'); - core.mapChangeAnimate('show', time/2, function () { + + var changing = function () { // 根据文字判断是否斜体 var floorName = core.status.maps[floorId].name; @@ -1854,20 +1876,38 @@ core.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback) core.drawMap(floorId, function () { setTimeout(function() { - core.mapChangeAnimate('hide', time/4, function () { - core.unLockControl(); - core.events.afterChangeFloor(floorId); - if (core.isset(callback)) callback(); - }); if (core.isset(heroLoc.direction)) core.setHeroLoc('direction', heroLoc.direction); core.setHeroLoc('x', heroLoc.x); core.setHeroLoc('y', heroLoc.y); core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop'); core.updateStatusBar(); + + var changed = function () { + core.unLockControl(); + core.events.afterChangeFloor(floorId); + if (core.isset(callback)) callback(); + } + if (displayAnimate) { + core.mapChangeAnimate('hide', time/4, function () { + changed(); + }); + } + else { + changed(); + } }, 15) }); - }); + } + if (displayAnimate) { + core.playSound('floor.mp3'); + core.mapChangeAnimate('show', time/2, function () { + changing(); + }); + } + else { + changing(); + } }, 50); } @@ -3547,7 +3587,7 @@ core.prototype.loadData = function (data, callback) { core.events.afterLoadData(data); - core.changeFloor(data.floorId, null, data.hero.loc, null, function() { + core.changeFloor(data.floorId, null, data.hero.loc, 0, function() { core.setHeroMoveTriggerInterval(); if (core.isset(callback)) callback(); }); diff --git a/libs/events.js b/libs/events.js index ff6a7667..5ae76e9b 100644 --- a/libs/events.js +++ b/libs/events.js @@ -706,6 +706,14 @@ events.prototype.afterLoadData = function(data) { /********** 点击事件、键盘事件 ************/ /****************************************/ +////// 长按 ////// +events.prototype.longClick = function () { + core.waitHeroToStop(function () { + // 绘制快捷键 + core.ui.drawKeyBoard(); + }); +} + ////// 按下Ctrl键时(快捷跳过对话) ////// events.prototype.keyDownCtrl = function () { if (core.status.event.id=='text') { @@ -1497,6 +1505,65 @@ events.prototype.keyUpSyncSave = function (keycode) { } } +////// “虚拟键盘”界面时的点击操作 ////// +events.prototype.clickKeyBoard = function (x, y) { + if (y==3 && x>=1 && x<=11) { + core.ui.closePanel(); + core.keyUp(112+x-1); // F1-F12: 112-122 + } + if (y==4 && x>=1 && x<=10) { + core.ui.closePanel(); + core.keyUp(x==10?48:48+x); // 1-9: 49-57; 0: 48 + } + // 字母 + var lines = [ + ["Q","W","E","R","T","Y","U","I","O","P"], + ["A","S","D","F","G","H","J","K","L"], + ["Z","X","C","V","B","N","M"], + ]; + if (y==5 && x>=1 && x<=10) { + core.ui.closePanel(); + core.keyUp(lines[0][x-1].charCodeAt(0)); + } + if (y==6 && x>=1 && x<=9) { + core.ui.closePanel(); + core.keyUp(lines[1][x-1].charCodeAt(0)); + } + if (y==7 && x>=1 && x<=7) { + core.ui.closePanel(); + core.keyUp(lines[2][x-1].charCodeAt(0)); + } + if (y==8 && x>=1 && x<=11) { + core.ui.closePanel(); + if (x==1) core.keyUp(189); // - + if (x==2) core.keyUp(187); // = + if (x==3) core.keyUp(219); // [ + if (x==4) core.keyUp(221); // ] + if (x==5) core.keyUp(220); // \ + if (x==6) core.keyUp(186); // ; + if (x==7) core.keyUp(222); // ' + if (x==8) core.keyUp(188); // , + if (x==9) core.keyUp(190); // . + if (x==10) core.keyUp(191); // / + if (x==11) core.keyUp(192); // ` + } + if (y==9 && x>=1 && x<=10) { + core.ui.closePanel(); + if (x==1) core.keyUp(27); // ESC + if (x==2) core.keyUp(9); // TAB + if (x==3) core.keyUp(20); // CAPS + if (x==4) core.keyUp(16); // SHIFT + if (x==5) core.keyUp(17); // CTRL + if (x==6) core.keyUp(18); // ALT + if (x==7) core.keyUp(32); // SPACE + if (x==8) core.keyUp(8); // BACKSPACE + if (x==9) core.keyUp(13); // ENTER + if (x==10) core.keyUp(46); // DEL + } + if (y==10 && x>=9 && x<=11) + core.ui.closePanel(); +} + ////// “关于”界面时的点击操作 ////// events.prototype.clickAbout = function () { if (core.isPlaying()) diff --git a/libs/ui.js b/libs/ui.js index 1d01873c..c64d18f1 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1114,6 +1114,44 @@ ui.prototype.drawThumbnail = function(floorId, canvas, blocks, x, y, size, heroL } } +ui.prototype.drawKeyBoard = function () { + core.lockControl(); + core.status.event.id = 'keyBoard'; + + core.clearMap('ui', 0, 0, 416, 416); + + var left = 16, top = 48, right = 416 - 2 * left, bottom = 416 - 2 * top; + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + core.canvas.ui.textAlign = "center"; + core.fillText('ui', "虚拟键盘", 208, top+35, "#FFD700", "bold 22px Verdana"); + + core.setFont('ui', '17px Verdana'); + core.setFillStyle('ui', '#FFFFFF'); + var offset = 128-9; + + var lines = [ + ["F1","F2","F3","F4","F5","F6","F7","F8","F9","10","11"], + ["1","2","3","4","5","6","7","8","9","0"], + ["Q","W","E","R","T","Y","U","I","O","P"], + ["A","S","D","F","G","H","J","K","L"], + ["Z","X","C","V","B","N","M"], + ["-","=","[","]","\\",";","'",",",".","/","`"], + ["ES","TA","CA","SH","CT","AL","SP","BS","EN","DE"] + ] + + lines.forEach(function (line) { + for (var i=0;i