In the previous tutorial we covered how to create entities from tiles. This approach can simplify entity creation, and works great for entities which are uniform (each instance is identical aside from position).
Some entities require custom properties per-instance. For example, consider a game where players can walk through doors to enter other maps. In this case, each door entity needs to have a custom property for which level it links to.
This walk-through shows how to create object layers in Tiled and how to create entities using these objects.
Creating a New Entity
For this tutorial we will be creating a Door entity which can be used to move the player from one level to the next. This entity will need to have collision so that the player can collide with it and we can respond to the collision.
To create a Door entity:
- In Glue, right-click on Entities
- Select Add Entity
- Enter the name Door
- Check the Circle check box
- Click OK
We also need to set CreatedByOtherEntities to True:
- Select the Door entity
- Click on the Properties tab
- Set CreatedByOtherEntities to True
We need to create a variable for which level to load when the Player collides with the Door:
- Right-click on the Variables folder under the Door entity
- Select Add Variable
- Select the Create a new variable option
- Select string as the Type
- Enter the Name LevelToGoTo
- Click OK
The name of the variable that we created (LevelToGoTo) needs to match the name of the property that we will be adding to the tile later in this guide. Note that if using a entity types XML, the property will automatically be added.
Just like with the Monster entity, we need to create a list of Door entities in GameScreen:
- Right-click drag+drop the Door entity onto GameScreen
- Select Add Entity List
Creating an object layer
Tiled object layers allow placing geometric shapes (such as rectangles, circles, and custom polygons) as well as images not bound to tiles. These images (also referred to as “tiles” in the Tiled program) can be used purely for non-interactive visuals or can be used to place entities.
Objects can be created and added to tile maps, where each instance has all of its properties set individually, or objects can be given default properties in the tileset.
First we’ll set up the common properties on our Door tile:
- Open dungeonTileSet.tsx in Tiled (click the edit button if the tsx file is not already open)
- Select the door tile
- Enter Door as the Type
- Click the + button to add a new property
- Enter the name LevelToGoTo
- Verify the type is string
We won’t assign the value of LevelToGo yet, we’ll do that per-instance.
Now that we’ve defined the Door tile properties, we’ll a Door to the Level2Tiled.tmx file.
First we’ll make an object layer:
- Open Level2Tmx in Tiled
- Click the Add Layer button
- Select Object Layer
- Name the new layer EntityObjectLayer
Next we’ll add an instance of the door to the EntityObjectLayer:
- Verify that EntityObjectLayer is selected
- Select the tile to be placed in the tile set
- Click on the tile map to place the tile
Notice that the placed door may not align with the tiles. If you wish to make it align, you use the Select Objects command to select the tile and either move it visually or change its X an Y properties:
Now we can add the LevelToGoTo property to our placed tile:
- Click the Select Objects button (if not already selected)
- Select the placed Door object (if not already selected)
- Enter the value Level1 for the LevelToGoTo property. More generally, the door’s LevelToGoTo property should be the name of the screen that we want to go to when the Player entity touches the Door.
Don’t forget to save the tile map.
Verifying the Door Entity
If we run our game now, we should see the Door tile that we placed in Tile replaced by a white circle, which is the collision of the Door entity:
This entity was automatically created by calling CreateEntitiesFrom , which we added to GameScreen.cs in the previous tutorial.
Colliding Against the Door Entity
We can use the Door entity to navigate between levels. We’ll check collision between the Player and all doors in the DoorList object (our game only has one door, but it could be expanded to have more). If a collision occurs, we’ll go to the level referenced by the door. See the following code for the new code to add door collision in GameScreen:
var relationship = CollisionManager.Self.CreateTileRelationship(
Camera.Main.X = Camera.Main.OrthogonalWidth / 3.0f;
Camera.Main.Y = -1 * Camera.Main.OrthogonalHeight / 3.0f;
var playerVsDoorRelationship = CollisionManager.Self.CreateRelationship(
playerVsDoorRelationship.CollisionOccurred = HandlePlayerVsDoorCollision;
private void HandlePlayerVsDoorCollision(Player player, Door door)
If the player touches the Door the GameScreen will restart itself on Level1 (or whichever level is referenced by the Door).