#28 修复解析properties
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
module es {
|
||||
import Bitmap = egret.Bitmap;
|
||||
|
||||
export class TiledRendering {
|
||||
public static renderMap(map: TmxMap, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) {
|
||||
map.layers.forEach(layer => {
|
||||
@@ -21,7 +23,7 @@ module es {
|
||||
let tileWidth = layer.map.tileWidth * scale.x;
|
||||
let tileHeight = layer.map.tileHeight * scale.y;
|
||||
|
||||
let color = DrawUtils.getColorMatrix(0x000000);
|
||||
let color = DrawUtils.getColorMatrix(0xFFFFFF);
|
||||
for (let i = 0; i < layer.tiles.length; i++) {
|
||||
let tile = layer.tiles[i];
|
||||
if (!tile)
|
||||
@@ -31,20 +33,67 @@ module es {
|
||||
}
|
||||
}
|
||||
|
||||
public static renderLayerRenderCamera(layer: ITmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number, camerClipBounds: Rectangle){
|
||||
if (layer instanceof TmxLayer && layer.visible) {
|
||||
this.renderLayerCamera(layer, container, position, scale, layerDepth, camerClipBounds);
|
||||
} else if (layer instanceof TmxImageLayer && layer.visible) {
|
||||
this.renderImageLayer(layer, container, position, scale, layerDepth);
|
||||
} else if (layer instanceof TmxGroup && layer.visible) {
|
||||
this.renderGroup(layer, container, position, scale, layerDepth);
|
||||
} else if (layer instanceof TmxObjectGroup && layer.visible) {
|
||||
this.renderObjectGroup(layer, container, position, scale, layerDepth);
|
||||
}
|
||||
}
|
||||
|
||||
public static renderLayerCamera(layer: TmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number, camerClipBounds: Rectangle){
|
||||
if (!layer.visible)
|
||||
return;
|
||||
|
||||
position = position.add(layer.offset);
|
||||
|
||||
camerClipBounds.location = camerClipBounds.location.subtract(position);
|
||||
|
||||
let tileWidth = layer.map.tileWidth * scale.x;
|
||||
let tileHeight = layer.map.tileHeight * scale.y;
|
||||
|
||||
let minX, minY, maxX, maxY = 0;
|
||||
if (layer.map.requiresLargeTileCulling){
|
||||
minX = layer.map.worldToTilePositionX(camerClipBounds.left - (layer.map.maxTileWidth * scale.x - tileWidth));
|
||||
minY = layer.map.worldToTilePositionY(camerClipBounds.top - (layer.map.maxTileHeight * scale.y - tileHeight));
|
||||
maxX = layer.map.worldToTilePositionX(camerClipBounds.right + (layer.map.maxTileWidth * scale.x - tileWidth));
|
||||
maxY = layer.map.worldToTilePositionY(camerClipBounds.bottom + (layer.map.maxTileHeight * scale.y - tileHeight));
|
||||
}else{
|
||||
minX = layer.map.worldToTilePositionX(camerClipBounds.left);
|
||||
minY = layer.map.worldToTilePositionY(camerClipBounds.top);
|
||||
maxX = layer.map.worldToTilePositionX(camerClipBounds.right);
|
||||
maxY = layer.map.worldToTilePositionY(camerClipBounds.bottom);
|
||||
}
|
||||
|
||||
let color = DrawUtils.getColorMatrix(0xFFFFFF);
|
||||
|
||||
for (let y = minY; y <= maxY; y ++){
|
||||
for (let x = minX; x <= maxX; x ++){
|
||||
let tile = layer.getTile(x, y);
|
||||
if (tile)
|
||||
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static renderImageLayer(layer: TmxImageLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) {
|
||||
if (!layer.visible)
|
||||
return;
|
||||
|
||||
let color = DrawUtils.getColorMatrix(0x000000);
|
||||
let color = DrawUtils.getColorMatrix(0xFFFFFF);
|
||||
let pos = Vector2.add(position, new Vector2(layer.offsetX, layer.offsetY).multiply(scale));
|
||||
if (!layer.image.bitmap.parent)
|
||||
container.addChild(layer.image.bitmap);
|
||||
layer.image.bitmap.x = pos.x;
|
||||
layer.image.bitmap.y = pos.y;
|
||||
layer.image.bitmap.scaleX = scale.x;
|
||||
layer.image.bitmap.scaleY = scale.y;
|
||||
layer.image.bitmap.filters = [color];
|
||||
if (!layer.image.texture.parent)
|
||||
container.addChild(layer.image.texture);
|
||||
layer.image.texture.x = pos.x;
|
||||
layer.image.texture.y = pos.y;
|
||||
layer.image.texture.scaleX = scale.x;
|
||||
layer.image.texture.scaleY = scale.y;
|
||||
layer.image.texture.filters = [color];
|
||||
}
|
||||
|
||||
public static renderObjectGroup(objGroup: TmxObjectGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) {
|
||||
@@ -57,7 +106,7 @@ module es {
|
||||
continue;
|
||||
|
||||
// 如果我们不调试渲染,我们只渲染平铺块和文本类型
|
||||
if (!Core.debugRenderEndabled){
|
||||
if (!Core.debugRenderEndabled) {
|
||||
if (obj.objectType != TmxObjectType.tile && obj.objectType != TmxObjectType.text)
|
||||
continue;
|
||||
}
|
||||
@@ -86,14 +135,14 @@ module es {
|
||||
let sourceRect = tileset.tileRegions[obj.tile.gid];
|
||||
pos.y -= obj.tile.tilesetTile.image.height;
|
||||
|
||||
if (!obj.tile.tilesetTile.image.bitmap)
|
||||
container.addChild(obj.tile.tilesetTile.image.bitmap);
|
||||
obj.tile.tilesetTile.image.bitmap.x = pos.x;
|
||||
obj.tile.tilesetTile.image.bitmap.y = pos.y;
|
||||
obj.tile.tilesetTile.image.bitmap.filters = [];
|
||||
obj.tile.tilesetTile.image.bitmap.rotation = 0;
|
||||
obj.tile.tilesetTile.image.bitmap.scaleX = scale.x;
|
||||
obj.tile.tilesetTile.image.bitmap.scaleY = scale.y;
|
||||
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;
|
||||
break;
|
||||
case TmxObjectType.ellipse:
|
||||
pos = new Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale);
|
||||
@@ -115,7 +164,7 @@ module es {
|
||||
Vector2.zero, 1);
|
||||
break;
|
||||
default:
|
||||
if (Core.debugRenderEndabled){
|
||||
if (Core.debugRenderEndabled) {
|
||||
if (!obj.textField.parent)
|
||||
container.addChild(obj.textField);
|
||||
DrawUtils.drawString(obj.textField, `${obj.name}(${obj.type})`, Vector2.subtract(pos, new Vector2(0, 15)), 0xffffff, 0, Vector2.zero, 1);
|
||||
@@ -166,18 +215,18 @@ module es {
|
||||
|
||||
if (tile.diagonalFlip) {
|
||||
if (tile.horizontalFlip && tile.verticalFlip) {
|
||||
rotation = MathHelper.PiOver2;
|
||||
rotation = MathHelper.toDegrees(MathHelper.PiOver2);
|
||||
tx += tileHeight + (sourceRect.height * scale.y - tileHeight);
|
||||
ty -= (sourceRect.width * scale.x - tileWidth);
|
||||
} else if (tile.horizontalFlip) {
|
||||
rotation = -MathHelper.PiOver2;
|
||||
rotation = MathHelper.toDegrees(-MathHelper.PiOver2);
|
||||
ty += tileHeight;
|
||||
} else if (tile.verticalFlip) {
|
||||
rotation = MathHelper.PiOver2;
|
||||
rotation = MathHelper.toDegrees(MathHelper.PiOver2);
|
||||
tx += tileWidth + (sourceRect.height * scale.y - tileHeight);
|
||||
ty += (tileWidth - sourceRect.width * scale.x);
|
||||
} else {
|
||||
rotation = -MathHelper.PiOver2;
|
||||
rotation = MathHelper.toDegrees(-MathHelper.PiOver2);
|
||||
ty += tileHeight;
|
||||
}
|
||||
}
|
||||
@@ -187,26 +236,34 @@ module es {
|
||||
ty += (tileHeight - sourceRect.height * scale.y);
|
||||
|
||||
let pos = new Vector2(tx, ty).add(position);
|
||||
if (tile.tileset.image) {
|
||||
if (!tile.tileset.image.bitmap.parent)
|
||||
container.addChild(tile.tileset.image.bitmap);
|
||||
tile.tileset.image.bitmap.x = pos.x;
|
||||
tile.tileset.image.bitmap.y = pos.y;
|
||||
tile.tileset.image.bitmap.scaleX = scale.x;
|
||||
tile.tileset.image.bitmap.scaleY = scale.y;
|
||||
tile.tileset.image.bitmap.rotation = rotation;
|
||||
tile.tileset.image.bitmap.filters = [color];
|
||||
} else {
|
||||
if (tilesetTile.image.bitmap){
|
||||
if (!tilesetTile.image.bitmap.parent)
|
||||
container.addChild(tilesetTile.image.bitmap);
|
||||
|
||||
tilesetTile.image.bitmap.x = pos.x;
|
||||
tilesetTile.image.bitmap.y = pos.y;
|
||||
tilesetTile.image.bitmap.scaleX = scale.x;
|
||||
tilesetTile.image.bitmap.scaleY = scale.y;
|
||||
tilesetTile.image.bitmap.rotation = rotation;
|
||||
tilesetTile.image.bitmap.filters = [color];
|
||||
if (tile.tileset.image) {
|
||||
if (!tile.tileset.image.bitmap.getTexture(gid.toString())) {
|
||||
tile.tileset.image.texture = new Bitmap(tile.tileset.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
|
||||
container.addChild(tile.tileset.image.texture);
|
||||
}
|
||||
tile.tileset.image.texture.x = pos.x;
|
||||
tile.tileset.image.texture.y = pos.y;
|
||||
tile.tileset.image.texture.scaleX = scale.x;
|
||||
tile.tileset.image.texture.scaleY = scale.y;
|
||||
tile.tileset.image.texture.rotation = rotation;
|
||||
tile.tileset.image.texture.anchorOffsetX = 0;
|
||||
tile.tileset.image.texture.anchorOffsetY = 0;
|
||||
tile.tileset.image.texture.filters = [color];
|
||||
} else {
|
||||
if (tilesetTile.image.texture) {
|
||||
if (!tilesetTile.image.bitmap.getTexture(gid.toString())) {
|
||||
tilesetTile.image.texture = new Bitmap(tilesetTile.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
|
||||
container.addChild(tilesetTile.image.texture);
|
||||
}
|
||||
tilesetTile.image.texture.x = pos.x;
|
||||
tilesetTile.image.texture.y = pos.y;
|
||||
tilesetTile.image.texture.scaleX = scale.x;
|
||||
tilesetTile.image.texture.scaleY = scale.y;
|
||||
tilesetTile.image.texture.rotation = rotation;
|
||||
tilesetTile.image.texture.anchorOffsetX = 0;
|
||||
tilesetTile.image.texture.anchorOffsetY = 0;
|
||||
tilesetTile.image.texture.filters = [color];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user