#28 支持objectgroup的tile类型

This commit is contained in:
YHH
2020-08-15 18:16:59 +08:00
parent 5dc7a72310
commit f0b2d5b9b8
9 changed files with 169 additions and 77 deletions

View File

@@ -59,7 +59,7 @@ module es {
*/
public static async parseLayers(container: any, xEle: any, map: TmxMap, width: number, height: number) {
for (let e of ObjectUtils.elements(xEle).where(x => {
return x.type == "tilelayer" || x.name == "objectgroup" || x.name == "imagelayer" || x.name == "group"
return x.type == "tilelayer" || x.type == "objectgroup" || x.type == "imagelayer" || x.type == "group"
})) {
let layer: ITmxLayer;
switch (e.type) {
@@ -394,10 +394,10 @@ module es {
let drawOrderValue = xObjectGroup["draworder"];
if (drawOrderValue)
group.drawOrder = drawOrderDict[drawOrderValue];
group.drawOrder = drawOrderDict.get(drawOrderValue);
group.objects = [];
for (let e of xObjectGroup["object"])
for (let e of xObjectGroup["objects"])
group.objects.push(this.loadTmxObject(new TmxObject(), map, e));
group.properties = this.parsePropertyDict(xObjectGroup["properties"]);
return group;
@@ -479,24 +479,18 @@ module es {
}
public static parsePoints(xPoints: any) {
let pointString: string = xPoints["points"];
let pointStringPair = pointString.split(' ');
let points = [];
let index = 0;
for (let s of pointStringPair)
for (let s of xPoints)
points[index++] = this.parsePoint(s);
return points;
}
public static parsePoint(s: string) {
let pt = s.split(',');
let x = Number(pt[0]);
let y = Number(pt[1]);
return new Vector2(x, y);
public static parsePoint(pt: {x: number, y: number}) {
return new Vector2(pt.x, pt.y);
}
public static parseTmxTerrain(xTerrain: any) {
let terrain = new TmxTerrain();
terrain.name = xTerrain["name"];

View File

@@ -112,7 +112,6 @@ module es {
continue;
}
let pos = Vector2.add(position, new Vector2(obj.x, obj.y).multiply(scale));
switch (obj.objectType) {
case TmxObjectType.basic:
@@ -133,17 +132,49 @@ module es {
break;
case TmxObjectType.tile:
let tileset = objGroup.map.getTilesetForTileGid(obj.tile.gid);
let sourceRect = tileset.tileRegions[obj.tile.gid];
pos.y -= obj.tile.tilesetTile.image.height;
let sourceRect = tileset.tileRegions.get(obj.tile.gid);
if (!obj.tile.tilesetTile.image.texture)
container.addChild(obj.tile.tilesetTile.image.texture);
obj.tile.tilesetTile.image.texture.x = pos.x;
obj.tile.tilesetTile.image.texture.y = pos.y;
obj.tile.tilesetTile.image.texture.filters = [];
obj.tile.tilesetTile.image.texture.rotation = 0;
obj.tile.tilesetTile.image.texture.scaleX = scale.x;
obj.tile.tilesetTile.image.texture.scaleY = scale.y;
if (obj.tile.horizontalFlip && obj.tile.verticalFlip) {
pos.x += tileset.tileHeight + (sourceRect.height * scale.y - tileset.tileHeight);
pos.y -= (sourceRect.width * scale.x - tileset.tileWidth);
}
else if (obj.tile.horizontalFlip) {
pos.x += tileset.tileWidth + (sourceRect.height * scale.y - tileset.tileHeight);
}
else if (obj.tile.verticalFlip) {
pos.y += (tileset.tileWidth - sourceRect.width * scale.x);
}
else {
pos.y += (tileset.tileHeight - sourceRect.height * scale.y);
}
if (container){
let texture: egret.Texture = tileset.image.bitmap.getTexture(`${obj.tile.gid}`);
if (!texture) {
texture = tileset.image.bitmap.createTexture(`${obj.tile.gid}`, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height);
}
tileset.image.texture = new Bitmap(texture);
container.addChild(tileset.image.texture);
if (tileset.image.texture.x != pos.x) tileset.image.texture.x = pos.x;
if (tileset.image.texture.y != pos.y) tileset.image.texture.y = pos.y;
if (obj.tile.verticalFlip && obj.tile.horizontalFlip){
tileset.image.texture.scaleX = -1;
tileset.image.texture.scaleY = -1;
}else if (obj.tile.verticalFlip){
tileset.image.texture.scaleX = scale.x;
tileset.image.texture.scaleY = -1;
}else if(obj.tile.horizontalFlip){
tileset.image.texture.scaleX = -1;
tileset.image.texture.scaleY = scale.y;
}else{
tileset.image.texture.scaleX = scale.x;
tileset.image.texture.scaleY = scale.y;
}
if (tileset.image.texture.anchorOffsetX != 0) tileset.image.texture.anchorOffsetX = 0;
if (tileset.image.texture.anchorOffsetY != 0) tileset.image.texture.anchorOffsetY = 0;
}
break;
case TmxObjectType.ellipse:
pos = new Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale);