From e6eca11ead3835891686566cf2bdb9ef0b0f9637 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 27 Dec 2017 16:10:47 +0800 Subject: [PATCH] Multiple Autotiles --- images/autotile1.png | Bin 0 -> 2896 bytes images/autotile2.png | Bin 0 -> 7481 bytes images/autotile3.png | Bin 0 -> 3829 bytes libs/core.js | 85 ++++++++++++++++++++++++----------------- libs/floors/sample1.js | 24 ++++++------ libs/floors/sample2.js | 2 +- libs/icons.js | 6 +++ libs/maps.js | 27 +++++++++++-- libs/ui.js | 2 +- main.js | 10 +++-- 10 files changed, 101 insertions(+), 55 deletions(-) create mode 100644 images/autotile1.png create mode 100644 images/autotile2.png create mode 100644 images/autotile3.png diff --git a/images/autotile1.png b/images/autotile1.png new file mode 100644 index 0000000000000000000000000000000000000000..2dacd883d751939559351f12edec3c7d264fbd5a GIT binary patch literal 2896 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 NVPtUm0$blP@;|E8VTb?# literal 0 HcmV?d00001 diff --git a/libs/core.js b/libs/core.js index f0a0a18c..f1c3f1ae 100644 --- a/libs/core.js +++ b/libs/core.js @@ -210,31 +210,24 @@ core.prototype.loader = function (callback) { for (var i = 0; i < core.images.length; i++) { core.loadImage(core.images[i], function (imgName, image) { core.setStartLoadTipText('正在加载图片 ' + imgName + "..."); - imgName = imgName.split('-'); - imgName = imgName[0]; core.material.images[imgName] = image; loadedImageNum++; core.setStartLoadTipText(imgName + ' 加载完毕...'); core.setStartProgressVal(loadedImageNum * (100 / allImageNum)); if (loadedImageNum == allImageNum) { - // 加载音频 - for (var key in core.sounds) { - for (var i = 0; i < core.sounds[key].length; i++) { - var soundName=core.sounds[key][i]; - soundName = soundName.split('-'); - var sound = new Audio(); - sound.preload = 'none'; - sound.src = 'sounds/' + soundName[0] + '.' + key; - if (soundName[1] == 'loop') { - sound.loop = 'loop'; + + // 加载Autotile + core.material.images.autotile={}; + var autotileIds = Object.keys(core.material.icons.autotile); + for (var x=0;x12 || y<0 || y>12) return 0; - return autotileMaps[13*x+y]?1:0; + return autotileMaps[13*x+y]==autotileId?1:0; } for (var xx=0;xx<13;xx++) { for (var yy=0;yy<13;yy++) { if (isAutotile(xx, yy)) { // 绘制autotile var id=isAutotile(xx, yy - 1) + 2 * isAutotile(xx - 1, yy) + 4 * isAutotile(xx, yy + 1) + 8 * isAutotile(xx + 1, yy); - core.drawAutotileBlock(floorId, canvas, left + xx * size, top + yy * size, size, core.material.images.autotile, id); + core.drawAutotileBlock(floorId, canvas, left + xx * size, top + yy * size, size, core.material.images.autotile[autotileId], id); } } } @@ -1810,16 +1827,16 @@ core.prototype.drawAutotile = function (floorId, canvas, autotileMaps, left, top for (var yy=0;yy<13;yy++) { if (isAutotile(xx, yy) + isAutotile(xx + 1, yy) + isAutotile(xx + 1, yy + 1) + isAutotile(xx, yy + 1) != 3) continue; if (!isAutotile(xx, yy)) { - core.drawAutotileBlock(floorId, canvas, left + xx * size + size, top + yy * size + size, size, core.material.images.autotile, 16); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size, top + yy * size + size, size, core.material.images.autotile[autotileId], 16); } if (!isAutotile(xx + 1, yy)) { - core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size, size, core.material.images.autotile, 17); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size, size, core.material.images.autotile[autotileId], 17); } if (!isAutotile(xx + 1, yy + 1)) { - core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size / 2, size, core.material.images.autotile, 18); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size / 2, size, core.material.images.autotile[autotileId], 18); } if (!isAutotile(xx, yy + 1)) { - core.drawAutotileBlock(floorId, canvas, left + xx * size + size, top + yy * size + size / 2, size, core.material.images.autotile, 19); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size, top + yy * size + size / 2, size, core.material.images.autotile[autotileId], 19); } } } diff --git a/libs/floors/sample1.js b/libs/floors/sample1.js index 4aaa4a92..b9197f2f 100644 --- a/libs/floors/sample1.js +++ b/libs/floors/sample1.js @@ -9,19 +9,19 @@ main.floors.sample1 = { "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "grass", // 默认地面的图块ID(terrains中) "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成 - [7, 131, 8, 2, 9, 130, 10, 2, 166, 165, 132, 165, 166], - [0, 0, 0, 0, 0, 0, 0, 2, 165, 164, 0, 162, 165], - [2, 2, 2, 2, 121, 2, 2, 2, 0, 0, 229, 0, 0], - [43, 33, 44, 1, 0, 0, 0, 2, 165, 161, 0, 163, 165], - [21, 22, 21, 1, 0, 0, 0, 2, 166, 165, 0, 165, 166], - [1, 245, 1, 1, 0, 87, 0, 2, 2, 2, 85, 2, 2], - [0, 246, 0, 1, 0, 0, 0, 2, 2, 221, 0, 221, 2], - [246, 0, 246, 1, 0, 0, 0, 121, 85, 0, 0, 0, 2], - [1, 246, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2], + [7, 131, 8, 152, 9, 130, 10, 152, 166, 165, 132, 165, 166], + [0, 0, 0, 0, 0, 0, 0, 152, 165, 164, 0, 162, 165], + [152, 152, 152, 152, 121, 152, 152, 152, 0, 0, 229, 0, 0], + [43, 33, 44, 151, 0, 0, 0, 152, 165, 161, 0, 163, 165], + [21, 22, 21, 151, 0, 0, 0, 152, 166, 165, 0, 165, 166], + [151, 245, 151, 151, 0, 87, 0, 152, 152, 152, 85, 153, 153], + [0, 246, 0, 151, 0, 0, 0, 152, 152, 221, 0, 221, 153], + [246, 0, 246, 151, 0, 0, 0, 121, 85, 0, 0, 0, 153], + [151, 246, 151, 151, 0, 153, 153, 153, 153, 153, 153, 153, 153], [0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 163, 0, 0], - [1, 1, 1, 1, 0, 3, 0, 0, 0, 162, 0, 161, 0], - [1, 0, 123, 1, 0, 3, 124, 0, 121, 0, 122, 0, 126], - [1, 0, 0, 1, 88, 3, 86, 0, 0, 0, 0, 0, 0], + [1, 1, 1, 1, 0, 20, 0, 0, 0, 162, 0, 161, 0], + [1, 0, 123, 1, 0, 20, 124, 0, 121, 0, 122, 0, 126], + [1, 0, 0, 1, 88, 20, 86, 0, 0, 0, 0, 0, 0], ], "firstArrive": [ // 第一次到该楼层触发的事件 diff --git a/libs/floors/sample2.js b/libs/floors/sample2.js index 10be1230..fb7af2b4 100644 --- a/libs/floors/sample2.js +++ b/libs/floors/sample2.js @@ -7,7 +7,7 @@ main.floors.sample2 = { "name": 40, // 显示在状态栏中的层数 "canFlyTo": false, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 - "defaultGround": "soil", // 默认地面的图块ID(terrains中) + "defaultGround": "snowGround", // 默认地面的图块ID(terrains中) "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成 [5, 5, 5, 5, 5, 5, 87, 5, 5, 5, 5, 5, 5], [5, 4, 4, 4, 4, 1, 0, 1, 4, 4, 4, 4, 5], diff --git a/libs/icons.js b/libs/icons.js index 2cd08b4a..4aced479 100644 --- a/libs/icons.js +++ b/libs/icons.js @@ -209,6 +209,12 @@ icons.prototype.init = function () { 'moneyPocket': 46, 'shoes': 47, 'hammer': 48 + }, + 'autotile': { // 所有的Autotile列表;后面的index简单取0即可 + 'autotile': 0, + 'autotile1': 0, + 'autotile2': 0, + 'autotile3': 0, } } } diff --git a/libs/maps.js b/libs/maps.js index aedd7101..0557f07a 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -61,6 +61,8 @@ maps.prototype.getBlock = function (x, y, id) { var tmp = {'x': x, 'y': y, 'id': id}; if (enable!=null) tmp.enable = enable; + ////////////////////////// 地形部分 ////////////////////////// + // 0-20 地形 if (id == 1) tmp.event = {'cls': 'terrains', 'id': 'yellowWall'}; // 黄墙 if (id == 2) tmp.event = {'cls': 'terrains', 'id': 'whiteWall'}; // 白墙 @@ -77,13 +79,19 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 13) tmp.event = {'cls': 'animates', 'id': 'weakNet', 'noPass': false, 'trigger': 'passNet'}; // 衰网 if (id == 14) tmp.event = {'cls': 'animates', 'id': 'curseNet', 'noPass': false, 'trigger': 'passNet'}; // 咒网 if (id == 15) tmp.event = {'cls': 'animates', 'id': 'water', 'noPass': true}; // 水 + // 在这里添加更多地形 + // 如果空地不足,可以从180以后开始继续放,只要不和现有的数字冲突即可 - - // autotile: 20 + // Autotile if (id == 20) tmp.event = {'cls': 'autotile', 'id': 'autotile', 'noPass': true}; // autotile - // 更多的autotile从350继续放 + // 更多的autotile从151到160,只要不和现有的数字冲突即可 + if (id == 151) tmp.event = {'cls': 'autotile', 'id': 'autotile1', 'noPass': true}; + if (id == 152) tmp.event = {'cls': 'autotile', 'id': 'autotile2', 'noPass': true}; + if (id == 153) tmp.event = {'cls': 'autotile', 'id': 'autotile3', 'noPass': true}; + ////////////////////////// 物品部分 ////////////////////////// + // 21-80 物品 if (id == 21) tmp.event = {'cls': 'items', 'id': 'yellowKey'}; // 黄钥匙 if (id == 22) tmp.event = {'cls': 'items', 'id': 'blueKey'}; // 蓝钥匙 @@ -131,6 +139,9 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 64) tmp.event = {'cls': 'items', 'id': 'shoes'} // 绿鞋 if (id == 65) tmp.event = {'cls': 'items', 'id': 'hammer'} // 圣锤 + + ////////////////////////// 门、楼梯、传送点部分 ////////////////////////// + // 81-100 门 if (id == 81) tmp.event = {'cls': 'terrains', 'id': 'yellowDoor', 'trigger': 'openDoor'}; // 黄门 if (id == 82) tmp.event = {'cls': 'terrains', 'id': 'blueDoor', 'trigger': 'openDoor'}; // 蓝门 @@ -148,6 +159,8 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 94) tmp.event = {'cls': 'animates', 'id': 'rightPortal', 'noPass': false}; // 右箭头 + ////////////////////////// NPC部分 ////////////////////////// + // 121-150 NPC if (id == 121) tmp.event = {'cls': 'npcs', 'id': 'man'}; if (id == 122) tmp.event = {'cls': 'npcs', 'id': 'woman'}; @@ -162,6 +175,8 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 131) tmp.event = {'cls': 'npcs', 'id': 'blueShop'}; if (id == 132) tmp.event = {'cls': 'npcs', 'id': 'princess'}; + ////////////////////////// 其他部分 ////////////////////////// + // 161-200 其他(单向箭头、灯、箱子等等) if (id == 161) tmp.event = {'cls': 'terrains', 'id': 'arrowUp', 'noPass': false}; // 单向上箭头 if (id == 162) tmp.event = {'cls': 'terrains', 'id': 'arrowDown', 'noPass': false}; // 单向下箭头 @@ -170,6 +185,9 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 165) tmp.event = {'cls': 'terrains', 'id': 'light', 'trigger': 'changeLight', 'noPass': false}; // 灯 if (id == 166) tmp.event = {'cls': 'terrains', 'id': 'darkLight', 'noPass': true}; // 暗灯 + + ////////////////////////// 怪物部分 ////////////////////////// + // 201-300 怪物 if (id == 201) tmp.event = {'cls': 'enemys', 'id': 'greenSlime'}; if (id == 202) tmp.event = {'cls': 'enemys', 'id': 'redSlime'}; @@ -232,6 +250,9 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 259) tmp.event = {'cls': 'enemys', 'id': 'darkFairy'}; if (id == 260) tmp.event = {'cls': 'enemys', 'id': 'greenKnight'}; + ////////////////////////// 待定... ////////////////////////// + // 目前ID暂时不要超过400 + return tmp; } diff --git a/libs/ui.js b/libs/ui.js index 6ac8143a..97e9b6df 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1044,7 +1044,7 @@ ui.prototype.drawThumbnail = function(floorId, canvas, blocks, x, y, size, heroL if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable)) { if (block.event.cls == 'autotile') { // core.drawAutotile(); - autotileMaps[13*block.x + block.y] = true; + autotileMaps[13*block.x + block.y] = block.event.id; continue; } else { diff --git a/main.js b/main.js index f173fa80..6d7f82bc 100644 --- a/main.js +++ b/main.js @@ -33,14 +33,12 @@ function main() { 'mdefCol': document.getElementById('mdefCol'), 'expCol': document.getElementById('expCol'), }; - // console.log('加载游戏容器和开始界面dom对象完成 如下'); - // console.log(this.dom); this.loadList = [ 'items', 'icons', 'maps', 'enemys', 'events', 'data', 'ui', 'core' ]; - // console.log('加载js文件列表加载完成' + this.loadList); this.images = [ - 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains', "autotile" + 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains' + // Autotile 动态添加 ]; this.sounds = { 'mp3': ['bgm-loop', 'floor'], @@ -78,6 +76,8 @@ function main() { 'curse': document.getElementById('curse'), 'hard': document.getElementById("hard") } + + //------------------------ 用户修改内容 ------------------------// this.version = "0.1"; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 this.useCompress = false; // 是否使用压缩文件 @@ -88,6 +88,8 @@ function main() { this.floorIds = [ // 在这里按顺序放所有的楼层;其顺序直接影响到楼层传送器的顺序和上楼器/下楼器的顺序 "sample0", "sample1", "sample2" ] + //------------------------ 用户修改内容 END ------------------------// + this.floors = {} this.instance = {}; this.canvas = {};