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”
- Right-click on the Objects foler under Door
- Select “Add Object”
- Verify that “FlatRedBall or Custom Type” is selected
- Select the Circle type
- Click OK
We also need to make the Door implement IColliable:
- Select the Door entity
- Click on the Properties tab
- Set “ImplementsICollidable” to True
- Set “CreatedByOtherEntities to True
We need to a variable to set 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 “Create a new variable”
- 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.
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, ad 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.
To create an object layer:
- Open Level2 in Tiled
- Click the Add Layer button
- Select “Object Layer”
- Name the new layer EntityObjectLayer
To add an image tile:
- 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:
- Verify that the door tile is selected
- Click the + button to add a new property
- Enter the name “EntityToCreate” and clck OK
- Enter the value “Door” for the EntityToCreate property
- Click the + button again
- Enter the name “LevelToGoTo”
- Enter the value “Level1” for the LevelToGoTo property
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. As a reminder, the code is called in CustomInitialize :
Camera.Main.X = Camera.Main.OrthogonalWidth / 2.0f;
Camera.Main.Y = -1 * Camera.Main.OrthogonalHeight / 2.0f;
Using 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 set the GameScreen.LevelToLoad property and reload the screen:
void CustomActivity(bool firstTimeCalled)
foreach(var door in DoorList)
LevelToLoad = door.LevelToGoTo;
If the player touches the Door the GameScreen will restart itself on Level1 (or whichever level is referenced by the Door).