tmxDirectory

This commit is contained in:
yhh
2020-08-17 19:40:44 +08:00
parent f7ee2c8d1c
commit 66ef4c6597
8 changed files with 131 additions and 139 deletions

View File

@@ -2,7 +2,7 @@ module es {
export class TmxDocument {
public tmxDirectory: string;
constructor(){
this.tmxDirectory = "";
this.tmxDirectory = "resource/assets/";
}
}
@@ -10,35 +10,6 @@ module es {
name: string;
}
// export class TmxList<T extends ITmxElement> extends Map<string, T>{
// public _nameCount: Map<string, number> = new Map<string, number>();
//
// public add(t: T){
// let tName = t.name;
//
// // 通过附加数字重命名重复的条目
// if (this.has(tName))
// this._nameCount.set(tName, this._nameCount.get(tName) + 1);
// else
// this._nameCount.set(tName, 0);
// }
//
// protected getKeyForItem(item: T): string {
// let name = item.name;
// let count = this._nameCount.get(name);
//
// let dupes = 0;
//
// // 对于重复的键,附加一个计数器。对于病理情况,插入下划线以确保唯一性
// while (this.has(name)){
// name = name + Enumerable.repeat("_", dupes).toString() + count.toString();
// dupes ++;
// }
//
// return name;
// }
// }
export class TmxImage {
public texture: egret.Bitmap;
public bitmap: egret.SpriteSheet;

View File

@@ -44,7 +44,7 @@ module es {
map.imageLayers = [];
map.groups = [];
this.parseLayers(map, xMap, map, map.width, map.height);
this.parseLayers(map, xMap, map, map.width, map.height, map.tmxDirectory);
return map;
}
@@ -56,8 +56,9 @@ module es {
* @param map
* @param width
* @param height
* @param tmxDirectory
*/
public static async parseLayers(container: any, xEle: any, map: TmxMap, width: number, height: number) {
public static async parseLayers(container: any, xEle: any, map: TmxMap, width: number, height: number, tmxDirectory: string) {
for (let e of ObjectUtils.elements(xEle).where(x => {
return x.type == "tilelayer" || x.type == "objectgroup" || x.type == "imagelayer" || x.type == "group"
})) {
@@ -78,14 +79,14 @@ module es {
container.objectGroups.push(objectgroup);
break;
case "imagelayer":
let imagelayer = await this.loadTmxImageLayer(new TmxImageLayer(), map, e);
let imagelayer = await this.loadTmxImageLayer(new TmxImageLayer(), map, e, tmxDirectory);
layer = imagelayer;
if (container instanceof TmxMap || container instanceof TmxGroup)
container.imageLayers.push(imagelayer);
break;
case "group":
let newGroup = this.loadTmxGroup(new TmxGroup(), map, e, width, height);
let newGroup = await this.loadTmxGroup(new TmxGroup(), map, e, width, height, tmxDirectory);
layer = newGroup;
if (container instanceof TmxMap || container instanceof TmxGroup)
@@ -100,7 +101,7 @@ module es {
}
}
public static loadTmxGroup(group: TmxGroup, map: TmxMap, xGroup: any, width: number, height: number) {
public static async loadTmxGroup(group: TmxGroup, map: TmxMap, xGroup: any, width: number, height: number, tmxDirectory: string) {
group.map = map;
group.name = xGroup["name"] != undefined ? xGroup["name"] : "";
group.opacity = xGroup["opacity"] != undefined ? xGroup["opacity"] : 1;
@@ -114,11 +115,11 @@ module es {
group.imageLayers = [];
group.groups = [];
this.parseLayers(group, xGroup, map, width, height);
await this.parseLayers(group, xGroup, map, width, height, tmxDirectory);
return group;
}
public static async loadTmxImageLayer(layer: TmxImageLayer, map: TmxMap, xImageLayer: any) {
public static async loadTmxImageLayer(layer: TmxImageLayer, map: TmxMap, xImageLayer: any, tmxDirectory: string) {
layer.map = map;
layer.name = xImageLayer["name"];
layer.width = xImageLayer["width"];
@@ -130,7 +131,7 @@ module es {
let xImage = xImageLayer["image"];
if (xImage) {
layer.image = await this.loadTmxImage(new TmxImage(), xImage);
layer.image = await this.loadTmxImage(new TmxImage(), xImage, tmxDirectory);
}
layer.properties = this.parsePropertyDict(xImageLayer["properties"]);
return layer;
@@ -269,7 +270,7 @@ module es {
// 如果是嵌入式TmxTileset即不是外部的source将为null
if (!source) {
source = "resource/assets/" + source;
source = map.tmxDirectory + source;
// 其他所有内容都在TSX文件中
let xDocTileset = await RES.getResByUrl(source, null, this, RES.ResourceItem.TYPE_IMAGE);
let tileset = this.loadTmxTileset(new TmxTileset(), map, xDocTileset["tileset"], firstGid);
@@ -296,7 +297,7 @@ module es {
let xImage = xTileset["image"];
if (xImage)
tileset.image = await this.loadTmxImage(new TmxImage(), xTileset);
tileset.image = await this.loadTmxImage(new TmxImage(), xTileset, map.tmxDirectory);
tileset.terrains = [];
if (xTileset["terrains"])
@@ -305,7 +306,7 @@ module es {
tileset.tiles = new Map<number, TmxTilesetTile>();
for (let xTile of xTileset["tiles"]) {
let tile = await this.loadTmxTilesetTile(new TmxTilesetTile(), tileset, xTile, tileset.terrains);
let tile = await this.loadTmxTilesetTile(new TmxTilesetTile(), tileset, xTile, tileset.terrains, map.tmxDirectory);
tileset.tiles.set(tile.id, tile);
}
@@ -334,7 +335,7 @@ module es {
return tileset;
}
public static async loadTmxTilesetTile(tile: TmxTilesetTile, tileset: TmxTileset, xTile: any, terrains: TmxTerrain[]) {
public static async loadTmxTilesetTile(tile: TmxTilesetTile, tileset: TmxTileset, xTile: any, terrains: TmxTerrain[], tmxDirectory: string) {
tile.tileset = tileset;
tile.id = xTile["id"];
@@ -351,7 +352,7 @@ module es {
tile.type = xTile["type"];
let xImage = xTile["image"];
if (xImage) {
tile.image = await this.loadTmxImage(new TmxImage(), xImage);
tile.image = await this.loadTmxImage(new TmxImage(), xImage, tmxDirectory);
}
tile.objectGroups = [];
@@ -513,10 +514,10 @@ module es {
return tmxTileOffset;
}
public static async loadTmxImage(image: TmxImage, xImage: any) {
public static async loadTmxImage(image: TmxImage, xImage: any, tmxDirectory: string) {
let xSource = xImage["image"];
if (xSource) {
image.source = "resource/assets/" + xSource;
image.source = tmxDirectory + xSource;
image.bitmap = new egret.SpriteSheet(await RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE));
} else {
image.format = xImage["format"];