拿到mv后写的第一个插件……导出地图为png图片,需要修改chrome打开参数以支持读取本地文件。
/*:
* @plugindesc 不是很优雅的导出实际地图png,请用chrome增加参数--disable-web-security --allow-file-access-from-files后打开index.html
* @author SureBrz
*
* @param mapId
* @desc 要转换的地图id
* @default 1
*/
(function() {
var parameters = PluginManager.parameters('SaveMapImg');
var mapId = parameters['mapId'] || 1;
// = =||
Graphics.isFontLoaded = function(name) {
return true;
};
// 新增 绘制所有tile到bitmap
Tilemap.prototype._paintAllMapTiles = function(bitmap, startX, startY) {
var tileCols = this._mapWidth;
var tileRows = this._mapHeight;
for (var y = 0; y < tileRows; y++) {
for (var x = 0; x < tileCols; x++) {
this._paintActualTiles(bitmap, x, y);
}
}
};
// 新增 绘制一个tile到bitmap
Tilemap.prototype._paintActualTiles = function(bitmap, x, y) {
var tableEdgeVirtualId = 10000;
var mx = x;
var my = y;
var dx = mx * this._tileWidth;
var dy = my * this._tileHeight;
var tileId0 = this._readMapData(mx, my, 0);
var tileId1 = this._readMapData(mx, my, 1);
var tileId2 = this._readMapData(mx, my, 2);
var tileId3 = this._readMapData(mx, my, 3);
var shadowBits = this._readMapData(mx, my, 4);
var upperTileId1 = this._readMapData(mx, my - 1, 1);
var lowerTiles = [];
var upperTiles = [];
if (this._isHigherTile(tileId0)) {
upperTiles.push(tileId0);
} else {
lowerTiles.push(tileId0);
}
if (this._isHigherTile(tileId1)) {
upperTiles.push(tileId1);
} else {
lowerTiles.push(tileId1);
}
lowerTiles.push(-shadowBits);
if (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1)) {
if (!Tilemap.isShadowingTile(tileId0)) {
lowerTiles.push(tableEdgeVirtualId + upperTileId1);
}
}
if (this._isOverpassPosition(mx, my)) {
upperTiles.push(tileId2);
upperTiles.push(tileId3);
} else {
if (this._isHigherTile(tileId2)) {
upperTiles.push(tileId2);
} else {
lowerTiles.push(tileId2);
}
if (this._isHigherTile(tileId3)) {
upperTiles.push(tileId3);
} else {
lowerTiles.push(tileId3);
}
}
for (var i = 0; i < lowerTiles.length; i++) {
var lowerTileId = lowerTiles[i];
if (lowerTileId < 0) {
this._drawShadow(bitmap, shadowBits, dx, dy);
} else if (lowerTileId >= tableEdgeVirtualId) {
this._drawTableEdge(bitmap, upperTileId1, dx, dy);
} else {
this._drawTile(bitmap, lowerTileId, dx, dy);
}
}
for (var j = 0; j < upperTiles.length; j++) {
this._drawTile(bitmap, upperTiles[j], dx, dy);
}
};
// 追加
var _Scene_Boot_prototype_create = Scene_Boot.prototype.create;
Scene_Boot.prototype.create = function() {
DataManager.loadMapData(mapId);
this.mapBitmapsLoaded = false;
_Scene_Boot_prototype_create.call(this);
};
// 重写
Scene_Boot.prototype.isReady = function() {
if (Scene_Base.prototype.isReady.call(this)) {
return DataManager.isDatabaseLoaded() && DataManager.isMapLoaded() && this.isGameFontLoaded();
} else {
return false;
}
};
// 重写
Scene_Boot.prototype.start = function() {
DataManager.setupNewGame();
$gameMap.setup(mapId);
this.spriteset = new Spriteset_Map();
};
// 新增
Scene_Boot.prototype.update = function() {
console.log("Scene_Boot.update");
if (!this.mapBitmapsLoaded && ImageManager.isReady()) {
// 保存图片
var tilemap = this.spriteset._tilemap;
var width = tilemap._tileWidth * tilemap._mapWidth; //this._width;
var height = tilemap._tileHeight * tilemap._mapHeight; //this._height;
var bitmap = new Bitmap(width, height);
tilemap._paintAllMapTiles(bitmap, 0, 0);
window.location.href = bitmap.context.canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
this.mapBitmapsLoaded = true
}
Scene_Base.prototype.update.call(this);
};
}());
放进plugins里,用法参注释。