#28 支持objectgroup的tile类型
This commit is contained in:
@@ -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"];
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user