#28 修复解析properties

This commit is contained in:
yhh
2020-08-14 11:44:20 +08:00
parent a2a73562a0
commit 15f6b06348
15 changed files with 1681 additions and 195 deletions
+4 -2
View File
@@ -1627,8 +1627,8 @@ declare module es {
name: string; name: string;
} }
class TmxImage { class TmxImage {
bitmap: egret.Bitmap; texture: egret.Bitmap;
readonly texture: egret.Texture; bitmap: egret.SpriteSheet;
source: string; source: string;
format: string; format: string;
data: any; data: any;
@@ -1803,6 +1803,8 @@ declare module es {
class TiledRendering { class TiledRendering {
static renderMap(map: TmxMap, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderMap(map: TmxMap, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderLayer(layer: TmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderLayer(layer: TmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderLayerRenderCamera(layer: ITmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number, camerClipBounds: Rectangle): void;
static renderLayerCamera(layer: TmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number, camerClipBounds: Rectangle): void;
static renderImageLayer(layer: TmxImageLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderImageLayer(layer: TmxImageLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderObjectGroup(objGroup: TmxObjectGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderObjectGroup(objGroup: TmxObjectGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderGroup(group: TmxGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderGroup(group: TmxGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
+110 -64
View File
@@ -3372,7 +3372,7 @@ var es;
else { else {
for (var i = 0; i < this.tiledMap.layers.length; i++) { for (var i = 0; i < this.tiledMap.layers.length; i++) {
if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i)) if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i))
es.TiledRendering.renderLayer(this.tiledMap.layers[i], this.displayObject, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer); es.TiledRendering.renderLayerRenderCamera(this.tiledMap.layers[i], this.displayObject, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer, camera.bounds);
} }
} }
}; };
@@ -7632,16 +7632,9 @@ var es;
var TmxImage = (function () { var TmxImage = (function () {
function TmxImage() { function TmxImage() {
} }
Object.defineProperty(TmxImage.prototype, "texture", {
get: function () {
return this.bitmap.texture;
},
enumerable: true,
configurable: true
});
TmxImage.prototype.dispose = function () { TmxImage.prototype.dispose = function () {
if (this.bitmap) { if (this.bitmap) {
this.texture.dispose(); this.bitmap.dispose();
this.bitmap = null; this.bitmap = null;
} }
}; };
@@ -7807,7 +7800,6 @@ var es;
})(es || (es = {})); })(es || (es = {}));
var es; var es;
(function (es) { (function (es) {
var Bitmap = egret.Bitmap;
var TiledMapLoader = (function () { var TiledMapLoader = (function () {
function TiledMapLoader() { function TiledMapLoader() {
} }
@@ -8070,12 +8062,14 @@ var es;
if (!prop) if (!prop)
return null; return null;
var dict = new Map(); var dict = new Map();
for (var _i = 0, _a = prop["property"]; _i < _a.length; _i++) { for (var _i = 0, prop_1 = prop; _i < prop_1.length; _i++) {
var p = _a[_i]; var p = prop_1[_i];
var pname = p["name"]; var pname = p["name"];
var valueAttr = p["value"]; var valueAttr = p["value"];
var pval = valueAttr ? valueAttr : p; if (p["type"] == "color")
dict.set(pname, pval); dict.set(pname, es.TmxUtils.color16ToUnit(valueAttr).toString());
else
dict.set(pname, valueAttr);
} }
return dict; return dict;
}; };
@@ -8151,9 +8145,9 @@ var es;
tileset.tileRegions = new Map(); tileset.tileRegions = new Map();
if (tileset.image && tileset.image.bitmap) { if (tileset.image && tileset.image.bitmap) {
id = firstGid; id = firstGid;
for (y = tileset.margin; y < tileset.image.bitmap.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) { for (y = tileset.margin; y < tileset.image.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) {
column = 0; column = 0;
for (x = tileset.margin; x < tileset.image.bitmap.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) { for (x = tileset.margin; x < tileset.image.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) {
tileset.tileRegions.set(id++, new es.Rectangle(x, y, tileset.tileWidth, tileset.tileHeight)); tileset.tileRegions.set(id++, new es.Rectangle(x, y, tileset.tileWidth, tileset.tileHeight));
if (++column >= tileset.columns) if (++column >= tileset.columns)
break; break;
@@ -8162,7 +8156,7 @@ var es;
} }
else { else {
tileset.tiles.forEach(function (tile) { tileset.tiles.forEach(function (tile) {
tileset.tileRegions.set(firstGid + tile.id, new es.Rectangle(0, 0, tile.image.bitmap.width, tile.image.bitmap.height)); tileset.tileRegions.set(firstGid + tile.id, new es.Rectangle(0, 0, tile.image.width, tile.image.height));
}); });
} }
return [2, tileset]; return [2, tileset];
@@ -8345,28 +8339,28 @@ var es;
}; };
TiledMapLoader.loadTmxImage = function (image, xImage) { TiledMapLoader.loadTmxImage = function (image, xImage) {
return __awaiter(this, void 0, void 0, function () { return __awaiter(this, void 0, void 0, function () {
var xSource, _a, _b, xData; var xSource, _a, _b, _c, xData;
return __generator(this, function (_c) { return __generator(this, function (_d) {
switch (_c.label) { switch (_d.label) {
case 0: case 0:
xSource = xImage["image"]; xSource = xImage["image"];
if (!xSource) return [3, 2]; if (!xSource) return [3, 2];
image.source = "resource/assets/" + xSource; image.source = "resource/assets/" + xSource;
_a = image; _a = image;
_b = Bitmap.bind; _c = (_b = egret.SpriteSheet).bind;
return [4, RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE)]; return [4, RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE)];
case 1: case 1:
_a.bitmap = new (_b.apply(Bitmap, [void 0, _c.sent()]))(); _a.bitmap = new (_c.apply(_b, [void 0, _d.sent()]))();
return [3, 3]; return [3, 3];
case 2: case 2:
image.format = xImage["format"]; image.format = xImage["format"];
xData = xImage["data"]; xData = xImage["data"];
image.data = es.TmxUtils.decode(xData, xData["encoding"], xData["compression"]); image.data = es.TmxUtils.decode(xData, xData["encoding"], xData["compression"]);
_c.label = 3; _d.label = 3;
case 3: case 3:
image.trans = es.TmxUtils.color16ToUnit(xImage["trans"]); image.trans = es.TmxUtils.color16ToUnit(xImage["trans"]);
image.width = xImage["width"] != undefined ? xImage["width"] : 0; image.width = xImage["imagewidth"] != undefined ? xImage["imagewidth"] : 0;
image.height = xImage["height"] != undefined ? xImage["height"] : 0; image.height = xImage["imageheight"] != undefined ? xImage["imageheight"] : 0;
return [2, image]; return [2, image];
} }
}); });
@@ -8378,6 +8372,7 @@ var es;
})(es || (es = {})); })(es || (es = {}));
var es; var es;
(function (es) { (function (es) {
var Bitmap = egret.Bitmap;
var TiledRendering = (function () { var TiledRendering = (function () {
function TiledRendering() { function TiledRendering() {
} }
@@ -8403,7 +8398,7 @@ var es;
return; return;
var tileWidth = layer.map.tileWidth * scale.x; var tileWidth = layer.map.tileWidth * scale.x;
var tileHeight = layer.map.tileHeight * scale.y; var tileHeight = layer.map.tileHeight * scale.y;
var color = es.DrawUtils.getColorMatrix(0x000000); var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
for (var i = 0; i < layer.tiles.length; i++) { for (var i = 0; i < layer.tiles.length; i++) {
var tile = layer.tiles[i]; var tile = layer.tiles[i];
if (!tile) if (!tile)
@@ -8411,18 +8406,61 @@ var es;
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth); this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
} }
}; };
TiledRendering.renderLayerRenderCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
if (layer instanceof es.TmxLayer && layer.visible) {
this.renderLayerCamera(layer, container, position, scale, layerDepth, camerClipBounds);
}
else if (layer instanceof es.TmxImageLayer && layer.visible) {
this.renderImageLayer(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxGroup && layer.visible) {
this.renderGroup(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxObjectGroup && layer.visible) {
this.renderObjectGroup(layer, container, position, scale, layerDepth);
}
};
TiledRendering.renderLayerCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
if (!layer.visible)
return;
position = position.add(layer.offset);
camerClipBounds.location = camerClipBounds.location.subtract(position);
var tileWidth = layer.map.tileWidth * scale.x;
var tileHeight = layer.map.tileHeight * scale.y;
var 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);
}
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
for (var y = minY; y <= maxY; y++) {
for (var x = minX; x <= maxX; x++) {
var tile = layer.getTile(x, y);
if (tile)
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
}
}
};
TiledRendering.renderImageLayer = function (layer, container, position, scale, layerDepth) { TiledRendering.renderImageLayer = function (layer, container, position, scale, layerDepth) {
if (!layer.visible) if (!layer.visible)
return; return;
var color = es.DrawUtils.getColorMatrix(0x000000); var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
var pos = es.Vector2.add(position, new es.Vector2(layer.offsetX, layer.offsetY).multiply(scale)); var pos = es.Vector2.add(position, new es.Vector2(layer.offsetX, layer.offsetY).multiply(scale));
if (!layer.image.bitmap.parent) if (!layer.image.texture.parent)
container.addChild(layer.image.bitmap); container.addChild(layer.image.texture);
layer.image.bitmap.x = pos.x; layer.image.texture.x = pos.x;
layer.image.bitmap.y = pos.y; layer.image.texture.y = pos.y;
layer.image.bitmap.scaleX = scale.x; layer.image.texture.scaleX = scale.x;
layer.image.bitmap.scaleY = scale.y; layer.image.texture.scaleY = scale.y;
layer.image.bitmap.filters = [color]; layer.image.texture.filters = [color];
}; };
TiledRendering.renderObjectGroup = function (objGroup, container, position, scale, layerDepth) { TiledRendering.renderObjectGroup = function (objGroup, container, position, scale, layerDepth) {
if (!objGroup.visible) if (!objGroup.visible)
@@ -8455,14 +8493,14 @@ var es;
var tileset = objGroup.map.getTilesetForTileGid(obj.tile.gid); var tileset = objGroup.map.getTilesetForTileGid(obj.tile.gid);
var sourceRect = tileset.tileRegions[obj.tile.gid]; var sourceRect = tileset.tileRegions[obj.tile.gid];
pos.y -= obj.tile.tilesetTile.image.height; pos.y -= obj.tile.tilesetTile.image.height;
if (!obj.tile.tilesetTile.image.bitmap) if (!obj.tile.tilesetTile.image.texture)
container.addChild(obj.tile.tilesetTile.image.bitmap); container.addChild(obj.tile.tilesetTile.image.texture);
obj.tile.tilesetTile.image.bitmap.x = pos.x; obj.tile.tilesetTile.image.texture.x = pos.x;
obj.tile.tilesetTile.image.bitmap.y = pos.y; obj.tile.tilesetTile.image.texture.y = pos.y;
obj.tile.tilesetTile.image.bitmap.filters = []; obj.tile.tilesetTile.image.texture.filters = [];
obj.tile.tilesetTile.image.bitmap.rotation = 0; obj.tile.tilesetTile.image.texture.rotation = 0;
obj.tile.tilesetTile.image.bitmap.scaleX = scale.x; obj.tile.tilesetTile.image.texture.scaleX = scale.x;
obj.tile.tilesetTile.image.bitmap.scaleY = scale.y; obj.tile.tilesetTile.image.texture.scaleY = scale.y;
break; break;
case es.TmxObjectType.ellipse: case es.TmxObjectType.ellipse:
pos = new es.Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale); pos = new es.Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale);
@@ -8522,21 +8560,21 @@ var es;
var rotation = 0; var rotation = 0;
if (tile.diagonalFlip) { if (tile.diagonalFlip) {
if (tile.horizontalFlip && tile.verticalFlip) { if (tile.horizontalFlip && tile.verticalFlip) {
rotation = es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(es.MathHelper.PiOver2);
tx += tileHeight + (sourceRect.height * scale.y - tileHeight); tx += tileHeight + (sourceRect.height * scale.y - tileHeight);
ty -= (sourceRect.width * scale.x - tileWidth); ty -= (sourceRect.width * scale.x - tileWidth);
} }
else if (tile.horizontalFlip) { else if (tile.horizontalFlip) {
rotation = -es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(-es.MathHelper.PiOver2);
ty += tileHeight; ty += tileHeight;
} }
else if (tile.verticalFlip) { else if (tile.verticalFlip) {
rotation = es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(es.MathHelper.PiOver2);
tx += tileWidth + (sourceRect.height * scale.y - tileHeight); tx += tileWidth + (sourceRect.height * scale.y - tileHeight);
ty += (tileWidth - sourceRect.width * scale.x); ty += (tileWidth - sourceRect.width * scale.x);
} }
else { else {
rotation = -es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(-es.MathHelper.PiOver2);
ty += tileHeight; ty += tileHeight;
} }
} }
@@ -8544,25 +8582,33 @@ var es;
ty += (tileHeight - sourceRect.height * scale.y); ty += (tileHeight - sourceRect.height * scale.y);
var pos = new es.Vector2(tx, ty).add(position); var pos = new es.Vector2(tx, ty).add(position);
if (tile.tileset.image) { if (tile.tileset.image) {
if (!tile.tileset.image.bitmap.parent) if (!tile.tileset.image.bitmap.getTexture(gid.toString())) {
container.addChild(tile.tileset.image.bitmap); tile.tileset.image.texture = new Bitmap(tile.tileset.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
tile.tileset.image.bitmap.x = pos.x; container.addChild(tile.tileset.image.texture);
tile.tileset.image.bitmap.y = pos.y; }
tile.tileset.image.bitmap.scaleX = scale.x; tile.tileset.image.texture.x = pos.x;
tile.tileset.image.bitmap.scaleY = scale.y; tile.tileset.image.texture.y = pos.y;
tile.tileset.image.bitmap.rotation = rotation; tile.tileset.image.texture.scaleX = scale.x;
tile.tileset.image.bitmap.filters = [color]; 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 { else {
if (tilesetTile.image.bitmap) { if (tilesetTile.image.texture) {
if (!tilesetTile.image.bitmap.parent) if (!tilesetTile.image.bitmap.getTexture(gid.toString())) {
container.addChild(tilesetTile.image.bitmap); tilesetTile.image.texture = new Bitmap(tilesetTile.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
tilesetTile.image.bitmap.x = pos.x; container.addChild(tilesetTile.image.texture);
tilesetTile.image.bitmap.y = pos.y; }
tilesetTile.image.bitmap.scaleX = scale.x; tilesetTile.image.texture.x = pos.x;
tilesetTile.image.bitmap.scaleY = scale.y; tilesetTile.image.texture.y = pos.y;
tilesetTile.image.bitmap.rotation = rotation; tilesetTile.image.texture.scaleX = scale.x;
tilesetTile.image.bitmap.filters = [color]; 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];
} }
} }
}; };
@@ -8673,7 +8719,7 @@ var es;
}; };
TmxUtils.color16ToUnit = function ($color) { TmxUtils.color16ToUnit = function ($color) {
if (!$color) if (!$color)
return 0x000000; return 0xFFFFFF;
var colorStr = "0x" + $color.slice(1); var colorStr = "0x" + $color.slice(1);
return parseInt(colorStr, 16); return parseInt(colorStr, 16);
}; };
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long
+6 -1
View File
@@ -1,7 +1,7 @@
{ {
"groups": [ "groups": [
{ {
"keys": "checkbox_select_disabled_png,checkbox_select_down_png,checkbox_select_up_png,checkbox_unselect_png,selected_png,border_png,header_png,radiobutton_select_disabled_png,radiobutton_select_down_png,radiobutton_select_up_png,radiobutton_unselect_png,roundthumb_png,thumb_png,track_png,tracklight_png,handle_png,off_png,on_png,button_down_png,button_up_png,thumb_pb_png,track_pb_png,track_sb_png,bg_jpg,egret_icon_png,description_json,isometric_grass_and_water_json", "keys": "checkbox_select_disabled_png,checkbox_select_down_png,checkbox_select_up_png,checkbox_unselect_png,selected_png,border_png,header_png,radiobutton_select_disabled_png,radiobutton_select_down_png,radiobutton_select_up_png,radiobutton_unselect_png,roundthumb_png,thumb_png,track_png,tracklight_png,handle_png,off_png,on_png,button_down_png,button_up_png,thumb_pb_png,track_pb_png,track_sb_png,bg_jpg,egret_icon_png,description_json,isometric_grass_and_water_json,orthogonal-outside_json",
"name": "preload" "name": "preload"
} }
], ],
@@ -150,6 +150,11 @@
"url": "assets/000010000.img.json", "url": "assets/000010000.img.json",
"type": "json", "type": "json",
"name": "000010000.img_json" "name": "000010000.img_json"
},
{
"url": "assets/orthogonal-outside.json",
"type": "json",
"name": "orthogonal-outside_json"
} }
] ]
} }
+1 -1
View File
@@ -31,7 +31,7 @@ module scene {
// player2.addComponent(new es.BoxCollider()); // player2.addComponent(new es.BoxCollider());
} }
let mapData = await es.TiledMapLoader.loadTmxMap(new es.TmxMap(), "isometric_grass_and_water_json"); let mapData = await es.TiledMapLoader.loadTmxMap(new es.TmxMap(), "orthogonal-outside_json");
let map = this.createEntity("map"); let map = this.createEntity("map");
map.addComponent(new es.TiledMapRenderer(mapData)); map.addComponent(new es.TiledMapRenderer(mapData));
console.log(mapData); console.log(mapData);
+4 -2
View File
@@ -1627,8 +1627,8 @@ declare module es {
name: string; name: string;
} }
class TmxImage { class TmxImage {
bitmap: egret.Bitmap; texture: egret.Bitmap;
readonly texture: egret.Texture; bitmap: egret.SpriteSheet;
source: string; source: string;
format: string; format: string;
data: any; data: any;
@@ -1803,6 +1803,8 @@ declare module es {
class TiledRendering { class TiledRendering {
static renderMap(map: TmxMap, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderMap(map: TmxMap, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderLayer(layer: TmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderLayer(layer: TmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderLayerRenderCamera(layer: ITmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number, camerClipBounds: Rectangle): void;
static renderLayerCamera(layer: TmxLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number, camerClipBounds: Rectangle): void;
static renderImageLayer(layer: TmxImageLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderImageLayer(layer: TmxImageLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderObjectGroup(objGroup: TmxObjectGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderObjectGroup(objGroup: TmxObjectGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
static renderGroup(group: TmxGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void; static renderGroup(group: TmxGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number): void;
+110 -64
View File
@@ -3372,7 +3372,7 @@ var es;
else { else {
for (var i = 0; i < this.tiledMap.layers.length; i++) { for (var i = 0; i < this.tiledMap.layers.length; i++) {
if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i)) if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i))
es.TiledRendering.renderLayer(this.tiledMap.layers[i], this.displayObject, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer); es.TiledRendering.renderLayerRenderCamera(this.tiledMap.layers[i], this.displayObject, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer, camera.bounds);
} }
} }
}; };
@@ -7632,16 +7632,9 @@ var es;
var TmxImage = (function () { var TmxImage = (function () {
function TmxImage() { function TmxImage() {
} }
Object.defineProperty(TmxImage.prototype, "texture", {
get: function () {
return this.bitmap.texture;
},
enumerable: true,
configurable: true
});
TmxImage.prototype.dispose = function () { TmxImage.prototype.dispose = function () {
if (this.bitmap) { if (this.bitmap) {
this.texture.dispose(); this.bitmap.dispose();
this.bitmap = null; this.bitmap = null;
} }
}; };
@@ -7807,7 +7800,6 @@ var es;
})(es || (es = {})); })(es || (es = {}));
var es; var es;
(function (es) { (function (es) {
var Bitmap = egret.Bitmap;
var TiledMapLoader = (function () { var TiledMapLoader = (function () {
function TiledMapLoader() { function TiledMapLoader() {
} }
@@ -8070,12 +8062,14 @@ var es;
if (!prop) if (!prop)
return null; return null;
var dict = new Map(); var dict = new Map();
for (var _i = 0, _a = prop["property"]; _i < _a.length; _i++) { for (var _i = 0, prop_1 = prop; _i < prop_1.length; _i++) {
var p = _a[_i]; var p = prop_1[_i];
var pname = p["name"]; var pname = p["name"];
var valueAttr = p["value"]; var valueAttr = p["value"];
var pval = valueAttr ? valueAttr : p; if (p["type"] == "color")
dict.set(pname, pval); dict.set(pname, es.TmxUtils.color16ToUnit(valueAttr).toString());
else
dict.set(pname, valueAttr);
} }
return dict; return dict;
}; };
@@ -8151,9 +8145,9 @@ var es;
tileset.tileRegions = new Map(); tileset.tileRegions = new Map();
if (tileset.image && tileset.image.bitmap) { if (tileset.image && tileset.image.bitmap) {
id = firstGid; id = firstGid;
for (y = tileset.margin; y < tileset.image.bitmap.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) { for (y = tileset.margin; y < tileset.image.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) {
column = 0; column = 0;
for (x = tileset.margin; x < tileset.image.bitmap.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) { for (x = tileset.margin; x < tileset.image.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) {
tileset.tileRegions.set(id++, new es.Rectangle(x, y, tileset.tileWidth, tileset.tileHeight)); tileset.tileRegions.set(id++, new es.Rectangle(x, y, tileset.tileWidth, tileset.tileHeight));
if (++column >= tileset.columns) if (++column >= tileset.columns)
break; break;
@@ -8162,7 +8156,7 @@ var es;
} }
else { else {
tileset.tiles.forEach(function (tile) { tileset.tiles.forEach(function (tile) {
tileset.tileRegions.set(firstGid + tile.id, new es.Rectangle(0, 0, tile.image.bitmap.width, tile.image.bitmap.height)); tileset.tileRegions.set(firstGid + tile.id, new es.Rectangle(0, 0, tile.image.width, tile.image.height));
}); });
} }
return [2, tileset]; return [2, tileset];
@@ -8345,28 +8339,28 @@ var es;
}; };
TiledMapLoader.loadTmxImage = function (image, xImage) { TiledMapLoader.loadTmxImage = function (image, xImage) {
return __awaiter(this, void 0, void 0, function () { return __awaiter(this, void 0, void 0, function () {
var xSource, _a, _b, xData; var xSource, _a, _b, _c, xData;
return __generator(this, function (_c) { return __generator(this, function (_d) {
switch (_c.label) { switch (_d.label) {
case 0: case 0:
xSource = xImage["image"]; xSource = xImage["image"];
if (!xSource) return [3, 2]; if (!xSource) return [3, 2];
image.source = "resource/assets/" + xSource; image.source = "resource/assets/" + xSource;
_a = image; _a = image;
_b = Bitmap.bind; _c = (_b = egret.SpriteSheet).bind;
return [4, RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE)]; return [4, RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE)];
case 1: case 1:
_a.bitmap = new (_b.apply(Bitmap, [void 0, _c.sent()]))(); _a.bitmap = new (_c.apply(_b, [void 0, _d.sent()]))();
return [3, 3]; return [3, 3];
case 2: case 2:
image.format = xImage["format"]; image.format = xImage["format"];
xData = xImage["data"]; xData = xImage["data"];
image.data = es.TmxUtils.decode(xData, xData["encoding"], xData["compression"]); image.data = es.TmxUtils.decode(xData, xData["encoding"], xData["compression"]);
_c.label = 3; _d.label = 3;
case 3: case 3:
image.trans = es.TmxUtils.color16ToUnit(xImage["trans"]); image.trans = es.TmxUtils.color16ToUnit(xImage["trans"]);
image.width = xImage["width"] != undefined ? xImage["width"] : 0; image.width = xImage["imagewidth"] != undefined ? xImage["imagewidth"] : 0;
image.height = xImage["height"] != undefined ? xImage["height"] : 0; image.height = xImage["imageheight"] != undefined ? xImage["imageheight"] : 0;
return [2, image]; return [2, image];
} }
}); });
@@ -8378,6 +8372,7 @@ var es;
})(es || (es = {})); })(es || (es = {}));
var es; var es;
(function (es) { (function (es) {
var Bitmap = egret.Bitmap;
var TiledRendering = (function () { var TiledRendering = (function () {
function TiledRendering() { function TiledRendering() {
} }
@@ -8403,7 +8398,7 @@ var es;
return; return;
var tileWidth = layer.map.tileWidth * scale.x; var tileWidth = layer.map.tileWidth * scale.x;
var tileHeight = layer.map.tileHeight * scale.y; var tileHeight = layer.map.tileHeight * scale.y;
var color = es.DrawUtils.getColorMatrix(0x000000); var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
for (var i = 0; i < layer.tiles.length; i++) { for (var i = 0; i < layer.tiles.length; i++) {
var tile = layer.tiles[i]; var tile = layer.tiles[i];
if (!tile) if (!tile)
@@ -8411,18 +8406,61 @@ var es;
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth); this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
} }
}; };
TiledRendering.renderLayerRenderCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
if (layer instanceof es.TmxLayer && layer.visible) {
this.renderLayerCamera(layer, container, position, scale, layerDepth, camerClipBounds);
}
else if (layer instanceof es.TmxImageLayer && layer.visible) {
this.renderImageLayer(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxGroup && layer.visible) {
this.renderGroup(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxObjectGroup && layer.visible) {
this.renderObjectGroup(layer, container, position, scale, layerDepth);
}
};
TiledRendering.renderLayerCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
if (!layer.visible)
return;
position = position.add(layer.offset);
camerClipBounds.location = camerClipBounds.location.subtract(position);
var tileWidth = layer.map.tileWidth * scale.x;
var tileHeight = layer.map.tileHeight * scale.y;
var 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);
}
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
for (var y = minY; y <= maxY; y++) {
for (var x = minX; x <= maxX; x++) {
var tile = layer.getTile(x, y);
if (tile)
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
}
}
};
TiledRendering.renderImageLayer = function (layer, container, position, scale, layerDepth) { TiledRendering.renderImageLayer = function (layer, container, position, scale, layerDepth) {
if (!layer.visible) if (!layer.visible)
return; return;
var color = es.DrawUtils.getColorMatrix(0x000000); var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
var pos = es.Vector2.add(position, new es.Vector2(layer.offsetX, layer.offsetY).multiply(scale)); var pos = es.Vector2.add(position, new es.Vector2(layer.offsetX, layer.offsetY).multiply(scale));
if (!layer.image.bitmap.parent) if (!layer.image.texture.parent)
container.addChild(layer.image.bitmap); container.addChild(layer.image.texture);
layer.image.bitmap.x = pos.x; layer.image.texture.x = pos.x;
layer.image.bitmap.y = pos.y; layer.image.texture.y = pos.y;
layer.image.bitmap.scaleX = scale.x; layer.image.texture.scaleX = scale.x;
layer.image.bitmap.scaleY = scale.y; layer.image.texture.scaleY = scale.y;
layer.image.bitmap.filters = [color]; layer.image.texture.filters = [color];
}; };
TiledRendering.renderObjectGroup = function (objGroup, container, position, scale, layerDepth) { TiledRendering.renderObjectGroup = function (objGroup, container, position, scale, layerDepth) {
if (!objGroup.visible) if (!objGroup.visible)
@@ -8455,14 +8493,14 @@ var es;
var tileset = objGroup.map.getTilesetForTileGid(obj.tile.gid); var tileset = objGroup.map.getTilesetForTileGid(obj.tile.gid);
var sourceRect = tileset.tileRegions[obj.tile.gid]; var sourceRect = tileset.tileRegions[obj.tile.gid];
pos.y -= obj.tile.tilesetTile.image.height; pos.y -= obj.tile.tilesetTile.image.height;
if (!obj.tile.tilesetTile.image.bitmap) if (!obj.tile.tilesetTile.image.texture)
container.addChild(obj.tile.tilesetTile.image.bitmap); container.addChild(obj.tile.tilesetTile.image.texture);
obj.tile.tilesetTile.image.bitmap.x = pos.x; obj.tile.tilesetTile.image.texture.x = pos.x;
obj.tile.tilesetTile.image.bitmap.y = pos.y; obj.tile.tilesetTile.image.texture.y = pos.y;
obj.tile.tilesetTile.image.bitmap.filters = []; obj.tile.tilesetTile.image.texture.filters = [];
obj.tile.tilesetTile.image.bitmap.rotation = 0; obj.tile.tilesetTile.image.texture.rotation = 0;
obj.tile.tilesetTile.image.bitmap.scaleX = scale.x; obj.tile.tilesetTile.image.texture.scaleX = scale.x;
obj.tile.tilesetTile.image.bitmap.scaleY = scale.y; obj.tile.tilesetTile.image.texture.scaleY = scale.y;
break; break;
case es.TmxObjectType.ellipse: case es.TmxObjectType.ellipse:
pos = new es.Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale); pos = new es.Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale);
@@ -8522,21 +8560,21 @@ var es;
var rotation = 0; var rotation = 0;
if (tile.diagonalFlip) { if (tile.diagonalFlip) {
if (tile.horizontalFlip && tile.verticalFlip) { if (tile.horizontalFlip && tile.verticalFlip) {
rotation = es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(es.MathHelper.PiOver2);
tx += tileHeight + (sourceRect.height * scale.y - tileHeight); tx += tileHeight + (sourceRect.height * scale.y - tileHeight);
ty -= (sourceRect.width * scale.x - tileWidth); ty -= (sourceRect.width * scale.x - tileWidth);
} }
else if (tile.horizontalFlip) { else if (tile.horizontalFlip) {
rotation = -es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(-es.MathHelper.PiOver2);
ty += tileHeight; ty += tileHeight;
} }
else if (tile.verticalFlip) { else if (tile.verticalFlip) {
rotation = es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(es.MathHelper.PiOver2);
tx += tileWidth + (sourceRect.height * scale.y - tileHeight); tx += tileWidth + (sourceRect.height * scale.y - tileHeight);
ty += (tileWidth - sourceRect.width * scale.x); ty += (tileWidth - sourceRect.width * scale.x);
} }
else { else {
rotation = -es.MathHelper.PiOver2; rotation = es.MathHelper.toDegrees(-es.MathHelper.PiOver2);
ty += tileHeight; ty += tileHeight;
} }
} }
@@ -8544,25 +8582,33 @@ var es;
ty += (tileHeight - sourceRect.height * scale.y); ty += (tileHeight - sourceRect.height * scale.y);
var pos = new es.Vector2(tx, ty).add(position); var pos = new es.Vector2(tx, ty).add(position);
if (tile.tileset.image) { if (tile.tileset.image) {
if (!tile.tileset.image.bitmap.parent) if (!tile.tileset.image.bitmap.getTexture(gid.toString())) {
container.addChild(tile.tileset.image.bitmap); tile.tileset.image.texture = new Bitmap(tile.tileset.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
tile.tileset.image.bitmap.x = pos.x; container.addChild(tile.tileset.image.texture);
tile.tileset.image.bitmap.y = pos.y; }
tile.tileset.image.bitmap.scaleX = scale.x; tile.tileset.image.texture.x = pos.x;
tile.tileset.image.bitmap.scaleY = scale.y; tile.tileset.image.texture.y = pos.y;
tile.tileset.image.bitmap.rotation = rotation; tile.tileset.image.texture.scaleX = scale.x;
tile.tileset.image.bitmap.filters = [color]; 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 { else {
if (tilesetTile.image.bitmap) { if (tilesetTile.image.texture) {
if (!tilesetTile.image.bitmap.parent) if (!tilesetTile.image.bitmap.getTexture(gid.toString())) {
container.addChild(tilesetTile.image.bitmap); tilesetTile.image.texture = new Bitmap(tilesetTile.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
tilesetTile.image.bitmap.x = pos.x; container.addChild(tilesetTile.image.texture);
tilesetTile.image.bitmap.y = pos.y; }
tilesetTile.image.bitmap.scaleX = scale.x; tilesetTile.image.texture.x = pos.x;
tilesetTile.image.bitmap.scaleY = scale.y; tilesetTile.image.texture.y = pos.y;
tilesetTile.image.bitmap.rotation = rotation; tilesetTile.image.texture.scaleX = scale.x;
tilesetTile.image.bitmap.filters = [color]; 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];
} }
} }
}; };
@@ -8673,7 +8719,7 @@ var es;
}; };
TmxUtils.color16ToUnit = function ($color) { TmxUtils.color16ToUnit = function ($color) {
if (!$color) if (!$color)
return 0x000000; return 0xFFFFFF;
var colorStr = "0x" + $color.slice(1); var colorStr = "0x" + $color.slice(1);
return parseInt(colorStr, 16); return parseInt(colorStr, 16);
}; };
+1 -1
View File
File diff suppressed because one or more lines are too long
@@ -101,8 +101,8 @@ module es {
} else { } else {
for (let i = 0; i < this.tiledMap.layers.length; i++) { for (let i = 0; i < this.tiledMap.layers.length; i++) {
if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i)) if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i))
TiledRendering.renderLayer(this.tiledMap.layers[i] as TmxLayer, this.displayObject as egret.DisplayObjectContainer, Vector2.add(this.entity.transform.position, this._localOffset), TiledRendering.renderLayerRenderCamera(this.tiledMap.layers[i] as TmxLayer, this.displayObject as egret.DisplayObjectContainer, Vector2.add(this.entity.transform.position, this._localOffset),
this.transform.scale, this.renderLayer); this.transform.scale, this.renderLayer, camera.bounds);
} }
} }
} }
+3 -5
View File
@@ -40,10 +40,8 @@ module es {
// } // }
export class TmxImage { export class TmxImage {
public bitmap: egret.Bitmap; public texture: egret.Bitmap;
public get texture(): egret.Texture{ public bitmap: egret.SpriteSheet;
return this.bitmap.texture;
}
public source: string; public source: string;
public format: string; public format: string;
public data: any; public data: any;
@@ -53,7 +51,7 @@ module es {
public dispose(){ public dispose(){
if (this.bitmap){ if (this.bitmap){
this.texture.dispose(); this.bitmap.dispose();
this.bitmap = null; this.bitmap = null;
} }
} }
+11 -9
View File
@@ -249,12 +249,14 @@ module es {
return null; return null;
let dict = new Map<string, string>(); let dict = new Map<string, string>();
for (let p of prop["property"]) { for (let p of prop) {
let pname = p["name"]; let pname = p["name"];
let valueAttr = p["value"]; let valueAttr = p["value"];
let pval = valueAttr ? valueAttr : p;
dict.set(pname, pval); if (p["type"] == "color")
dict.set(pname, TmxUtils.color16ToUnit(valueAttr).toString());
else
dict.set(pname, valueAttr);
} }
return dict; return dict;
} }
@@ -316,9 +318,9 @@ module es {
tileset.tileRegions = new Map<number, Rectangle>(); tileset.tileRegions = new Map<number, Rectangle>();
if (tileset.image && tileset.image.bitmap) { if (tileset.image && tileset.image.bitmap) {
let id = firstGid; let id = firstGid;
for (let y = tileset.margin; y < tileset.image.bitmap.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) { for (let y = tileset.margin; y < tileset.image.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) {
let column = 0; let column = 0;
for (let x = tileset.margin; x < tileset.image.bitmap.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) { for (let x = tileset.margin; x < tileset.image.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) {
tileset.tileRegions.set(id++, new Rectangle(x, y, tileset.tileWidth, tileset.tileHeight)); tileset.tileRegions.set(id++, new Rectangle(x, y, tileset.tileWidth, tileset.tileHeight));
if (++column >= tileset.columns) if (++column >= tileset.columns)
@@ -327,7 +329,7 @@ module es {
} }
} else { } else {
tileset.tiles.forEach(tile => { tileset.tiles.forEach(tile => {
tileset.tileRegions.set(firstGid + tile.id, new Rectangle(0, 0, tile.image.bitmap.width, tile.image.bitmap.height)); tileset.tileRegions.set(firstGid + tile.id, new Rectangle(0, 0, tile.image.width, tile.image.height));
}); });
} }
@@ -515,7 +517,7 @@ module es {
let xSource = xImage["image"]; let xSource = xImage["image"];
if (xSource) { if (xSource) {
image.source = "resource/assets/" + xSource; image.source = "resource/assets/" + xSource;
image.bitmap = new Bitmap(await RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE)); image.bitmap = new egret.SpriteSheet(await RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE));
} else { } else {
image.format = xImage["format"]; image.format = xImage["format"];
let xData = xImage["data"]; let xData = xImage["data"];
@@ -523,8 +525,8 @@ module es {
} }
image.trans = TmxUtils.color16ToUnit(xImage["trans"]); image.trans = TmxUtils.color16ToUnit(xImage["trans"]);
image.width = xImage["width"] != undefined ? xImage["width"] : 0; image.width = xImage["imagewidth"] != undefined ? xImage["imagewidth"] : 0;
image.height = xImage["height"] != undefined ? xImage["height"] : 0; image.height = xImage["imageheight"] != undefined ? xImage["imageheight"] : 0;
return image; return image;
} }
+97 -40
View File
@@ -1,4 +1,6 @@
module es { module es {
import Bitmap = egret.Bitmap;
export class TiledRendering { export class TiledRendering {
public static renderMap(map: TmxMap, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) { public static renderMap(map: TmxMap, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) {
map.layers.forEach(layer => { map.layers.forEach(layer => {
@@ -21,7 +23,7 @@ module es {
let tileWidth = layer.map.tileWidth * scale.x; let tileWidth = layer.map.tileWidth * scale.x;
let tileHeight = layer.map.tileHeight * scale.y; 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++) { for (let i = 0; i < layer.tiles.length; i++) {
let tile = layer.tiles[i]; let tile = layer.tiles[i];
if (!tile) 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) { public static renderImageLayer(layer: TmxImageLayer, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) {
if (!layer.visible) if (!layer.visible)
return; return;
let color = DrawUtils.getColorMatrix(0x000000); let color = DrawUtils.getColorMatrix(0xFFFFFF);
let pos = Vector2.add(position, new Vector2(layer.offsetX, layer.offsetY).multiply(scale)); let pos = Vector2.add(position, new Vector2(layer.offsetX, layer.offsetY).multiply(scale));
if (!layer.image.bitmap.parent) if (!layer.image.texture.parent)
container.addChild(layer.image.bitmap); container.addChild(layer.image.texture);
layer.image.bitmap.x = pos.x; layer.image.texture.x = pos.x;
layer.image.bitmap.y = pos.y; layer.image.texture.y = pos.y;
layer.image.bitmap.scaleX = scale.x; layer.image.texture.scaleX = scale.x;
layer.image.bitmap.scaleY = scale.y; layer.image.texture.scaleY = scale.y;
layer.image.bitmap.filters = [color]; layer.image.texture.filters = [color];
} }
public static renderObjectGroup(objGroup: TmxObjectGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) { public static renderObjectGroup(objGroup: TmxObjectGroup, container: egret.DisplayObjectContainer, position: Vector2, scale: Vector2, layerDepth: number) {
@@ -86,14 +135,14 @@ module es {
let sourceRect = tileset.tileRegions[obj.tile.gid]; let sourceRect = tileset.tileRegions[obj.tile.gid];
pos.y -= obj.tile.tilesetTile.image.height; pos.y -= obj.tile.tilesetTile.image.height;
if (!obj.tile.tilesetTile.image.bitmap) if (!obj.tile.tilesetTile.image.texture)
container.addChild(obj.tile.tilesetTile.image.bitmap); container.addChild(obj.tile.tilesetTile.image.texture);
obj.tile.tilesetTile.image.bitmap.x = pos.x; obj.tile.tilesetTile.image.texture.x = pos.x;
obj.tile.tilesetTile.image.bitmap.y = pos.y; obj.tile.tilesetTile.image.texture.y = pos.y;
obj.tile.tilesetTile.image.bitmap.filters = []; obj.tile.tilesetTile.image.texture.filters = [];
obj.tile.tilesetTile.image.bitmap.rotation = 0; obj.tile.tilesetTile.image.texture.rotation = 0;
obj.tile.tilesetTile.image.bitmap.scaleX = scale.x; obj.tile.tilesetTile.image.texture.scaleX = scale.x;
obj.tile.tilesetTile.image.bitmap.scaleY = scale.y; obj.tile.tilesetTile.image.texture.scaleY = scale.y;
break; break;
case TmxObjectType.ellipse: case TmxObjectType.ellipse:
pos = new Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale); pos = new Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale);
@@ -166,18 +215,18 @@ module es {
if (tile.diagonalFlip) { if (tile.diagonalFlip) {
if (tile.horizontalFlip && tile.verticalFlip) { if (tile.horizontalFlip && tile.verticalFlip) {
rotation = MathHelper.PiOver2; rotation = MathHelper.toDegrees(MathHelper.PiOver2);
tx += tileHeight + (sourceRect.height * scale.y - tileHeight); tx += tileHeight + (sourceRect.height * scale.y - tileHeight);
ty -= (sourceRect.width * scale.x - tileWidth); ty -= (sourceRect.width * scale.x - tileWidth);
} else if (tile.horizontalFlip) { } else if (tile.horizontalFlip) {
rotation = -MathHelper.PiOver2; rotation = MathHelper.toDegrees(-MathHelper.PiOver2);
ty += tileHeight; ty += tileHeight;
} else if (tile.verticalFlip) { } else if (tile.verticalFlip) {
rotation = MathHelper.PiOver2; rotation = MathHelper.toDegrees(MathHelper.PiOver2);
tx += tileWidth + (sourceRect.height * scale.y - tileHeight); tx += tileWidth + (sourceRect.height * scale.y - tileHeight);
ty += (tileWidth - sourceRect.width * scale.x); ty += (tileWidth - sourceRect.width * scale.x);
} else { } else {
rotation = -MathHelper.PiOver2; rotation = MathHelper.toDegrees(-MathHelper.PiOver2);
ty += tileHeight; ty += tileHeight;
} }
} }
@@ -187,26 +236,34 @@ module es {
ty += (tileHeight - sourceRect.height * scale.y); ty += (tileHeight - sourceRect.height * scale.y);
let pos = new Vector2(tx, ty).add(position); 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; if (tile.tileset.image) {
tilesetTile.image.bitmap.y = pos.y; if (!tile.tileset.image.bitmap.getTexture(gid.toString())) {
tilesetTile.image.bitmap.scaleX = scale.x; tile.tileset.image.texture = new Bitmap(tile.tileset.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
tilesetTile.image.bitmap.scaleY = scale.y; container.addChild(tile.tileset.image.texture);
tilesetTile.image.bitmap.rotation = rotation; }
tilesetTile.image.bitmap.filters = [color]; 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];
} }
} }
} }
+1 -1
View File
@@ -41,7 +41,7 @@ module es {
*/ */
static color16ToUnit($color:string): number { static color16ToUnit($color:string): number {
if (!$color) if (!$color)
return 0x000000; return 0xFFFFFF;
var colorStr: string = "0x" + $color.slice(1); var colorStr: string = "0x" + $color.slice(1);
return parseInt(colorStr, 16); return parseInt(colorStr, 16);
} }