diff --git a/libs/actions.js b/libs/actions.js index 156542dd..113b8b61 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -997,10 +997,17 @@ actions.prototype._clickBook = function (x, y) { // 怪物信息 var data = core.status.event.data; if (data != null && y < this.LAST) { - var page = parseInt(data / this.HSIZE); - var index = this.HSIZE * page + parseInt(y / 2); - core.ui.drawBook(index); - core.ui.drawBookDetail(index); + var pageinfo = core.ui._drawBook_pageinfo(); + var per_page = pageinfo.per_page, page = parseInt(data / per_page); + var u = this.LAST / per_page; + for (var i = 0; i < per_page; ++i) { + if (y >= u*i && y <= u*(i+1)) { + var index = per_page * page + i; + core.ui.drawBook(index); + core.ui.drawBookDetail(index); + break; + } + } return; } return; @@ -1033,7 +1040,7 @@ actions.prototype._keyUpBook = function (keycode) { if (keycode == 13 || keycode == 32 || keycode == 67) { var data = core.status.event.data; if (data != null) { - this._clickBook(this.HSIZE, 2 * (data % this.HSIZE)); + core.ui.drawBookDetail(data); } return; } diff --git a/libs/ui.js b/libs/ui.js index 1c194fbd..2372860a 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -516,11 +516,15 @@ ui.prototype.drawBackground = function (left, top, right, bottom, posInfo) { return false; } +ui.prototype._drawWindowSkin_getOpacity = function () { + return core.getFlag("__winskin_opacity__", 0.85); +} + ui.prototype._drawBackground_drawWindowSkin = function (background, left, top, right, bottom, position, px, py) { if (typeof background == 'string' && core.material.images.images[background]) { var image = core.material.images.images[background]; if (image.width==192 && image.height==128) { - core.setAlpha('ui', 0.85); + core.setAlpha('ui', this._drawWindowSkin_getOpacity()); this.drawWindowSkin(image, 'ui', left, top, right - left, bottom - top, position, px, py); core.setAlpha('ui', 1); return true; @@ -810,7 +814,7 @@ ui.prototype.drawTextBox = function(content, showAll) { var pInfo = core.clone(posInfo); pInfo.xoffset = hPos.xoffset; pInfo.yoffset = vPos.yoffset - 4; var isWindowSkin = this.drawBackground(hPos.left, vPos.top, hPos.right, vPos.bottom, pInfo); - var alpha = isWindowSkin ? 0.85 : textAttribute.background[3]; + var alpha = isWindowSkin ? this._drawWindowSkin_getOpacity() : textAttribute.background[3]; // Step 4: 绘制标题、头像、动画 var content_top = this._drawTextBox_drawTitleAndIcon(titleInfo, hPos, vPos, alpha); @@ -1317,12 +1321,14 @@ ui.prototype.drawBook = function (index) { index = core.clamp(index, 0, enemys.length - 1); core.status.event.data = index; - var perpage = this.HSIZE, page = parseInt(index / perpage) + 1, totalPage = Math.ceil(enemys.length / perpage); + var pageinfo = this._drawBook_pageinfo(); + var perpage = pageinfo.per_page, page = parseInt(index / perpage) + 1, totalPage = Math.ceil(enemys.length / perpage); + var start = (page - 1) * perpage; enemys = enemys.slice(start, page * perpage); for (var i = 0; i < enemys.length; i++) - this._drawBook_drawOne(floorId, i, enemys[i], index == start + i); + this._drawBook_drawOne(floorId, i, enemys[i], pageinfo, index == start + i); core.drawBoxAnimate(); this.drawPagination(page, totalPage); @@ -1330,6 +1336,13 @@ ui.prototype.drawBook = function (index) { core.fillText('ui', '返回游戏', this.PIXEL - 46, this.PIXEL - 13,'#DDDDDD', this._buildFont(15, true)); } +ui.prototype._drawBook_pageinfo = function () { + var per_page = this.HSIZE; // 每页个数 + var padding_top = 12; // 距离顶端像素 + var per_height = (this.PIXEL - 32 - padding_top) / per_page; + return { per_page: per_page, padding_top: padding_top, per_height: per_height }; +} + ui.prototype._drawBook_drawBackground = function () { core.setAlpha('ui', 1); core.setFillStyle('ui', core.material.groundPattern); @@ -1340,24 +1353,24 @@ ui.prototype._drawBook_drawBackground = function () { core.fillRect('ui', 0, 0, this.PIXEL, this.PIXEL); } -ui.prototype._drawBook_drawOne = function (floorId, index, enemy, selected) { - // --- 区域规划:每个区域总高度为62,宽度为 PIXEL - var top = 62 * index + 12; // 最上面margin是12px +ui.prototype._drawBook_drawOne = function (floorId, index, enemy, pageinfo, selected) { + // --- 区域规划:每个区域总高度默认为62,宽度为 PIXEL + var top = pageinfo.per_height * index + pageinfo.padding_top; // 最上面margin默认是12px // 横向规划: // 22 + 42 = 64 是头像框 - this._drawBook_drawBox(index, enemy, top); + this._drawBook_drawBox(index, enemy, top, pageinfo); // 剩余 PIXEL - 64 的宽度,按照 10 : 9 : 8 : 8 的比例划分 var left = 64, total_width = this.PIXEL - left; var name_width = total_width * 10 / 35; this._drawBook_drawName(index, enemy, top, left, name_width); this._drawBook_drawContent(index, enemy, top, left + name_width); if (selected) - core.strokeRect('ui', 10, top + 1, this.PIXEL - 10 * 2, 62, '#FFD700'); + core.strokeRect('ui', 10, top + 1, this.PIXEL - 10 * 2, pageinfo.per_height, '#FFD700'); } -ui.prototype._drawBook_drawBox = function (index, enemy, top) { +ui.prototype._drawBook_drawBox = function (index, enemy, top, pageinfo) { // 横向:22+42;纵向:10 + 42 + 10(正好居中);内部图像 32x32 - var border_top = top + 10, border_left = 22; + var border_top = top + (pageinfo.per_height - 42) / 2, border_left = 22; var img_top = border_top + 5, img_left = border_left + 5; core.strokeRect('ui', 22, border_top, 42, 42, '#DDDDDD', 2); var blockInfo = core.getBlockInfo(enemy.id);