void HandleCustomTilePropertyAt(int worldX, int worldY, CCTileMapLayer layer) { CCTileMapCoordinates tileAtXy = layer.ClosestTileCoordAtNodePosition(new CCPoint(worldX, worldY)); CCTileGidAndFlags info = layer.TileGIDAndFlags(tileAtXy.Column, tileAtXy.Row); if (info != null) { Dictionary <string, string> properties = null; try { properties = _map.TilePropertiesForGID(info.Gid); } catch { // CocosSharp } if (properties != null && properties.ContainsKey("IsTreasure") && properties["IsTreasure"] == "true") { layer.RemoveTile(tileAtXy); // todo: Create a treasure chest entity } } }
void flipIt(float dt) { CCTileMapLayer layer = tileMap.LayerNamed("Layer 0"); //blue diamond var tileCoord = new CCTileMapCoordinates(1, 10); CCTileGidAndFlags gidAndFlags = layer.TileGIDAndFlags(tileCoord); CCTileFlags flags = gidAndFlags.Flags; short GID = gidAndFlags.Gid; // Vertical if ((flags & CCTileFlags.Vertical) != 0) { flags &= ~CCTileFlags.Vertical; } else { flags |= CCTileFlags.Vertical; } layer.SetTileGID(new CCTileGidAndFlags(GID, flags), tileCoord); tileCoord = new CCTileMapCoordinates(1, 8); gidAndFlags = layer.TileGIDAndFlags(tileCoord); GID = gidAndFlags.Gid; flags = gidAndFlags.Flags; // Vertical if ((flags & CCTileFlags.Vertical) != 0) { flags &= ~CCTileFlags.Vertical; } else { flags |= CCTileFlags.Vertical; } layer.SetTileGID(new CCTileGidAndFlags(GID, flags), tileCoord); tileCoord = new CCTileMapCoordinates(2, 8); gidAndFlags = layer.TileGIDAndFlags(tileCoord); GID = gidAndFlags.Gid; flags = gidAndFlags.Flags; // Horizontal if ((flags & CCTileFlags.Horizontal) != 0) { flags &= ~CCTileFlags.Horizontal; } else { flags |= CCTileFlags.Horizontal; } layer.SetTileGID(new CCTileGidAndFlags(GID, flags), tileCoord); }
public IEnumerable <PropertyLocation> GetPropertyLocations() { // Width and Height are equal so we can use either int tileDimension = (int)tileMap.TileTexelSize.Width; // Find out how many rows and columns are in our tile map int numberOfColumns = (int)tileMap.MapDimensions.Size.Width; int numberOfRows = (int)tileMap.MapDimensions.Size.Height; // Tile maps can have multiple layers, so let's loop through all of them: foreach (CCTileMapLayer layer in tileMap.TileLayersContainer.Children) { // Loop through the columns and rows to find all tiles for (int column = 0; column < numberOfColumns; column++) { // We're going to add tileDimension / 2 to get the position // of the center of the tile - this will help us in // positioning entities, and will eliminate the possibility // of floating point error when calculating the nearest tile: int worldX = tileDimension * column + tileDimension / 2; for (int row = 0; row < numberOfRows; row++) { // See above on why we add tileDimension / 2 int worldY = tileDimension * row + tileDimension / 2; CCTileMapCoordinates tileAtXy = layer.ClosestTileCoordAtNodePosition(new CCPoint(worldX, worldY)); CCTileGidAndFlags info = layer.TileGIDAndFlags(tileAtXy.Column, tileAtXy.Row); if (info != null) { Dictionary <string, string> properties = null; try { properties = tileMap.TilePropertiesForGID(info.Gid); } catch { // CocosSharp crashed here...but this may be fixed in the current version } if (properties != null) { yield return(new PropertyLocation { WorldX = worldX, WorldY = worldY, Properties = properties, Layer = layer, TileCoordinates = tileAtXy }); } } } } } }
public TMXOrthoTest4() : base("TileMaps/orthogonal-test4") { CCTileMapLayer layer = tileMap.LayerNamed("Layer 0"); CCTileMapCoordinates s = layer.LayerSize; sprite = layer.ExtractTile(0, 0); sprite.Scale = 2; sprite2 = layer.ExtractTile(s.Column - 1, 0); sprite2.Scale = 2; sprite3 = layer.ExtractTile(0, s.Row - 1); sprite3.Scale = 2; sprite4 = layer.ExtractTile(s.Column - 1, s.Row - 1); sprite4.Scale = 2; Schedule(removeSprite, 2); }