修复锁定视角闪烁 & 大怪物
This commit is contained in:
parent
3bac35cc36
commit
96477f77d0
@ -831,20 +831,16 @@ control.prototype.drawHero = function (status, offset, frame) {
|
||||
core.status.heroCenter.py = 32 * y + offsetY + 32 - core.material.icons.hero.height / 2;
|
||||
|
||||
// 重置hero层画布
|
||||
var px = parseFloat(core.canvas.hero.canvas.getAttribute('_px')) || 0;
|
||||
var py = parseFloat(core.canvas.hero.canvas.getAttribute('_py')) || 0;
|
||||
core.setGameCanvasTranslate('hero', 0, 0);
|
||||
core.canvas.hero.canvas.removeAttribute('_px');
|
||||
core.canvas.hero.canvas.removeAttribute('_py');
|
||||
offset.px = px;
|
||||
offset.py = py;
|
||||
delete core.canvas.hero._px;
|
||||
delete core.canvas.hero._py;
|
||||
if (!core.hasFlag('__lockViewport__')) {
|
||||
this._drawHero_updateViewport(x, y, offset);
|
||||
}
|
||||
|
||||
if (!core.hasFlag('hideHero')) {
|
||||
this._drawHero_draw(direction, x, y, status, offset, frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
control.prototype._drawHero_updateViewport = function (x, y, offset) {
|
||||
@ -858,7 +854,7 @@ control.prototype._drawHero_draw = function (direction, x, y, status, offset, fr
|
||||
this._drawHero_getDrawObjs(direction, x, y, status, offset).forEach(function (block) {
|
||||
core.drawImage('hero', block.img, (block.heroIcon[block.status] + (frame || 0))%4*block.width,
|
||||
block.heroIcon.loc * block.height, block.width, block.height,
|
||||
offset.px+block.posx+(32-block.width)/2, offset.py+block.posy+32-block.height, block.width, block.height);
|
||||
block.posx+(32-block.width)/2, block.posy+32-block.height, block.width, block.height);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1015,14 +1011,13 @@ control.prototype.setViewport = function (px, py) {
|
||||
core.bigmap.offsetY = core.clamp(py, 0, 32 * core.bigmap.height - core.__PIXELS__);
|
||||
this.updateViewport();
|
||||
// ------ hero层也需要!
|
||||
var canvas = core.canvas.hero.canvas;
|
||||
var px = parseFloat(canvas.getAttribute('_px')) || 0;
|
||||
var py = parseFloat(canvas.getAttribute('_py')) || 0;
|
||||
var px = parseFloat(core.canvas.hero._px) || 0;
|
||||
var py = parseFloat(core.canvas.hero._py) || 0;
|
||||
px += originOffsetX - core.bigmap.offsetX;
|
||||
py += originOffsetY - core.bigmap.offsetY;
|
||||
core.control.setGameCanvasTranslate('hero', px, py);
|
||||
core.canvas.hero.canvas.setAttribute('_px', px);
|
||||
core.canvas.hero.canvas.setAttribute('_py', py);
|
||||
core.canvas.hero._px = px;
|
||||
core.canvas.hero._py = py;
|
||||
}
|
||||
|
||||
////// 移动视野范围 //////
|
||||
|
||||
@ -423,7 +423,7 @@ events.prototype._trigger_ignoreChangeFloor = function (block) {
|
||||
|
||||
events.prototype._sys_battle = function (data, callback) {
|
||||
// 检查是否需要改变朝向
|
||||
if (data.x == core.nextX() && data.y == core.nextY()) {
|
||||
/* if (data.x == core.nextX() && data.y == core.nextY()) {
|
||||
var dir = core.turnDirection(":back");
|
||||
var id = data.event.id, toId = (data.event.faceIds || {})[dir];
|
||||
if (toId && id != toId) {
|
||||
@ -431,7 +431,7 @@ events.prototype._sys_battle = function (data, callback) {
|
||||
if (number > 0)
|
||||
core.setBlock(number, data.x, data.y);
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
// 检查战前事件
|
||||
var beforeBattle = [];
|
||||
|
||||
49
libs/maps.js
49
libs/maps.js
@ -968,10 +968,9 @@ maps.prototype._getBigImageInfo = function (bigImage, face, animate) {
|
||||
}
|
||||
var dx, dy;
|
||||
switch (face) {
|
||||
case "down": dx = 16 - per_width / 2; dy = 32 - per_height; break;
|
||||
case "left": dx = 0; dy = 16 - per_height / 2; break;
|
||||
case "right": dx = 32 - per_width; dy = 16 - per_height / 2; break;
|
||||
case "up": dx = 16 - per_width / 2; dy = 0; break;
|
||||
case "down": case "up": dx = 16 - per_width / 2; dy = 32 - per_height; break;
|
||||
case "left": dx = 0; dy = 32 - per_height; break;
|
||||
case "right": dx = 32 - per_width; dy = 32 - per_height; break;
|
||||
}
|
||||
|
||||
return {sx: sx, sy: sy, per_width: per_width, per_height: per_height, face: face, dx: dx, dy: dy};
|
||||
@ -1034,41 +1033,34 @@ maps.prototype._drawBlockInfo_bigImage = function (blockInfo, x, y, ctx) {
|
||||
var dx = bigImageInfo.dx, dy = bigImageInfo.dy;
|
||||
|
||||
switch (bigImageInfo.face) {
|
||||
case "down":
|
||||
core.createCanvas(header, px + dx, py + dy, per_width, per_height - 32, 51);
|
||||
case "down": case "up":
|
||||
core.createCanvas(header, px + dx, py + dy, per_width, -dy, 51);
|
||||
this._drawBlockInfo_drawWithFilter(blockInfo, header, function () {
|
||||
core.drawImage(header, bigImage, sx, sy, per_width, per_height - 32, 0, 0, per_width, per_height - 32);
|
||||
core.drawImage(header, bigImage, sx, sy, per_width, -dy, 0, 0, per_width, -dy);
|
||||
});
|
||||
core.createCanvas(body, px + dx, py, per_width, 32, 31);
|
||||
this._drawBlockInfo_drawWithFilter(blockInfo, body, function () {
|
||||
core.drawImage(body, bigImage, sx, sy + per_height - 32, per_width, 32, 0, 0, per_width, 32);
|
||||
core.drawImage(body, bigImage, sx, sy - dy, per_width, 32, 0, 0, per_width, 32);
|
||||
})
|
||||
break;
|
||||
case "left":
|
||||
core.createCanvas(header, px + dx, py + dy, per_width, per_height / 2 - 16, 51);
|
||||
core.createCanvas(header, px + dx, py + dy, per_width, -dy, 51);
|
||||
this._drawBlockInfo_drawWithFilter(blockInfo, header, function () {
|
||||
core.drawImage(header, bigImage, sx, sy, per_width, per_height / 2 - 16, 0, 0, per_width, per_height / 2 - 16);
|
||||
core.drawImage(header, bigImage, sx, sy, per_width, -dy, 0, 0, per_width, -dy);
|
||||
});
|
||||
core.createCanvas(body, px + dx, py, per_width, per_height / 2 + 16, 31);
|
||||
core.createCanvas(body, px + dx, py, per_width, 32, 31);
|
||||
this._drawBlockInfo_drawWithFilter(blockInfo, body, function () {
|
||||
core.drawImage(body, bigImage, sx, sy + per_height / 2 - 16, per_width, per_height / 2 + 16, 0, 0, per_width, per_height / 2 + 16);
|
||||
core.drawImage(body, bigImage, sx, sy - dy, per_width, 32, 0, 0, per_width, 32);
|
||||
});
|
||||
break;
|
||||
case "right":
|
||||
core.createCanvas(header, px + dx, py + dy, per_width, per_height / 2 - 16, 51);
|
||||
core.createCanvas(header, px + dx, py + dy, per_width, -dy, 51);
|
||||
this._drawBlockInfo_drawWithFilter(blockInfo, header, function () {
|
||||
core.drawImage(header, bigImage, sx, sy, per_width, per_height / 2 - 16, 0, 0, per_width, per_height / 2 - 16);
|
||||
core.drawImage(header, bigImage, sx, sy, per_width, -dy, 0, 0, per_width, -dy);
|
||||
});
|
||||
core.createCanvas(body, px + dx, py, per_width, per_height / 2 + 16, 31);
|
||||
this._drawBlockInfo_drawWithFilter(blockInfo, body, function () {
|
||||
core.drawImage(body, bigImage, sx, sy + per_height / 2 - 16, per_width, per_height / 2 + 16, 0, 0, per_width, per_height / 2 + 16);
|
||||
});
|
||||
break;
|
||||
case "up":
|
||||
core.deleteCanvas(header);
|
||||
core.createCanvas(body, px + dx, py, per_width, per_height, 31);
|
||||
this._drawBlockInfo_drawWithFilter(blockInfo, body, function () {
|
||||
core.drawImage(body, bigImage, sx, sy, per_width, per_height, 0, 0, per_width, per_height);
|
||||
core.drawImage(body, bigImage, sx, sy - dy, per_width, 32, 0, 0, per_width, 32);
|
||||
});
|
||||
break;
|
||||
}
|
||||
@ -2525,7 +2517,18 @@ maps.prototype._moveDetachedBlock = function (blockInfo, nowX, nowY, opacity, ca
|
||||
}
|
||||
if (bodyCanvas) {
|
||||
if (blockInfo.bigImage) {
|
||||
var bigImageInfo = this._getBigImageInfo(blockInfo.bigImage, blockInfo.face, blockInfo.posX);
|
||||
var face = blockInfo.face;
|
||||
if (!blockInfo.faceIds) face = 'down';
|
||||
else if (!blockInfo.faceIds[face]) {
|
||||
// 维持此时朝向
|
||||
face = 'down';
|
||||
for (var f in blockInfo.faceIds) {
|
||||
if (blockInfo.faceIds[f] == blockInfo.id) {
|
||||
face = f;
|
||||
}
|
||||
}
|
||||
}
|
||||
var bigImageInfo = this._getBigImageInfo(blockInfo.bigImage, face, blockInfo.posX);
|
||||
var per_width = bigImageInfo.per_width, per_height = bigImageInfo.per_height;
|
||||
core.dymCanvas[bodyCanvas].clearRect(0, 0, bigImageInfo.per_width, bigImageInfo.per_height);
|
||||
core.dymCanvas[bodyCanvas].drawImage(blockInfo.bigImage, bigImageInfo.sx, bigImageInfo.sy, per_width, per_height, 0, 0, per_width, per_height);
|
||||
|
||||
@ -382,7 +382,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
|
||||
"cls": "tools",
|
||||
"name": "炸弹",
|
||||
"text": "可以炸掉勇士面前的怪物",
|
||||
"useItemEffect": "(function () {\n\tvar bombList = []; // 炸掉的怪物坐标列表\n\tvar todo = []; // 炸弹后事件\n\tvar money = 0,\n\t\texp = 0; // 炸弹获得的金币和经验\n\n\tvar canBomb = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.disable || block.event.cls.indexOf('enemy') != 0) return false;\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\treturn enemy && !enemy.notBomb;\n\t};\n\n\tvar bomb = function (x, y) {\n\t\tif (!canBomb(x, y)) return;\n\t\tbombList.push([x, y]);\n\t\tvar id = core.getBlockId(x, y),\n\t\t\tenemy = core.material.enemys[id];\n\t\tmoney += core.getEnemyValue(enemy, 'money', x, y) || 0;\n\t\texp += core.getEnemyValue(enemy, 'exp', x, y) || 0;\n\t\tcore.push(todo, core.floors[core.status.floorId].afterBattle[x + \",\" + y]);\n\t\tcore.push(todo, enemy.afterBattle);\n\t\tcore.removeBlock(x, y);\n\t}\n\n\t// 如果要多方向可炸,把这里的false改成true\n\tif (false) {\n\t\tvar scan = core.utils.scan; // 多方向炸时默认四方向,如果要改成八方向炸可以改成 core.utils.scan2\n\t\tfor (var direction in scan) {\n\t\t\tvar delta = scan[direction];\n\t\t\tbomb(core.getHeroLoc('x') + delta.x, core.getHeroLoc('y') + delta.y);\n\t\t}\n\t} else {\n\t\t// 仅炸当前\n\t\tbomb(core.nextX(), core.nextY());\n\t}\n\n\tif (bombList.length > 0) {\n\t\tcore.playSound('炸弹');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功', itemId);\n\t\t// 取消这里的注释可以炸弹后获得金币和经验\n\t\t// core.status.hero.money += money;\n\t\t// core.status.hero.exp += exp;\n\n\t\t// 取消这里的注释可以炸弹引发战后事件\n\t\t// if (todo.length > 0) core.insertAction(todo);\n\t} else {\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip('当前无法使用' + core.material.items[itemId].name, itemId);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n\n\t// 炸弹后事件\n\t// 这是一个使用炸弹也能开门的例子\n\t/*\n\tif (core.status.floorId=='xxx' && core.terrainExists(x0,y0,'specialDoor') // 某个楼层,该机关门存在\n\t\t&& !core.enemyExists(x1,y1) && !core.enemyExists(x2,y2)) // 且守门的怪物都不存在\n\t{\n\t\tcore.insertAction([ // 插入事件\n\t\t\t{\"type\": \"openDoor\", \"loc\": [x0,y0]} // 开门\n\t\t])\n\t}\n\t*/\n})();",
|
||||
"useItemEffect": "(function () {\n\tvar bombList = []; // 炸掉的怪物坐标列表\n\tvar todo = []; // 炸弹后事件\n\tvar money = 0,\n\t\texp = 0; // 炸弹获得的金币和经验\n\n\tvar canBomb = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.disable || block.event.cls.indexOf('enemy') != 0) return false;\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\treturn enemy && !enemy.notBomb;\n\t};\n\n\tvar bomb = function (x, y) {\n\t\tif (!canBomb(x, y)) return;\n\t\tbombList.push([x, y]);\n\t\tvar id = core.getBlockId(x, y),\n\t\t\tenemy = core.material.enemys[id];\n\t\tmoney += core.getEnemyValue(enemy, 'money', x, y) || 0;\n\t\texp += core.getEnemyValue(enemy, 'exp', x, y) || 0;\n\t\tcore.push(todo, core.floors[core.status.floorId].afterBattle[x + \",\" + y]);\n\t\tcore.push(todo, enemy.afterBattle);\n\t\tcore.removeBlock(x, y);\n\t}\n\n\t// 如果要多方向可炸,把这里的false改成true\n\tif (false) {\n\t\tvar scan = core.utils.scan; // 多方向炸时默认四方向,如果要改成八方向炸可以改成 core.utils.scan2\n\t\tfor (var direction in scan) {\n\t\t\tvar delta = scan[direction];\n\t\t\tbomb(core.getHeroLoc('x') + delta.x, core.getHeroLoc('y') + delta.y);\n\t\t}\n\t} else {\n\t\t// 仅炸当前\n\t\tbomb(core.nextX(), core.nextY());\n\t}\n\n\tif (bomb.length == 0) {\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip('当前无法使用' + core.material.items[itemId].name, itemId);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n\n\tcore.playSound('炸弹');\n\tcore.drawTip(core.material.items[itemId].name + '使用成功', itemId);\n\n\t// 取消这里的注释可以炸弹后获得金币和经验\n\t// core.status.hero.money += money;\n\t// core.status.hero.exp += exp;\n\n\t// 取消这里的注释可以炸弹引发战后事件\n\t// if (todo.length > 0) core.insertAction(todo);\n\n})();",
|
||||
"canUseItemEffect": "true"
|
||||
},
|
||||
"centerFly": {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user