Difference between revisions of "Simple Platform"

From TRCCompSci - AQA Computer Science
Jump to: navigation, search
(Create Map)
Line 1: Line 1:
 
This will show you how to create a platform game using a tiled map, and tile based collision detection.
 
This will show you how to create a platform game using a tiled map, and tile based collision detection.
  
==Create Map==
+
=Create Map=
 +
==Tiled==
 +
You will firstly need to install the Tiled program from the website and link below. In college the Tiled executeables are on moodle, under project, technical skill, monogame, and tiled. I have also added links to other tutorials for using Tiled.
 +
 
 +
===Tiled Website and Download===
 +
 
 +
[http://www.mapeditor.org/ Tiled Map Editor]
 +
 
 +
===Tutorials for using Tiled===
 +
 
 +
[http://doc.mapeditor.org/ Offical Tiled Tutorials]
 +
 
 +
[https://gamedevelopment.tutsplus.com/tutorials/introduction-to-tiled-map-editor-a-platform-agnostic-tool-for-level-maps--gamedev-2838 Tiled Basics]
 +
 
 +
[https://www.youtube.com/playlist?list=PLpWTFopWU5f3xgvztkivtEcYmocD-Xigt Tiled Youtube Playlist Series]
 +
 
 +
[http://www.gamefromscratch.com/post/2014/04/15/A-quick-look-at-Tiled-An-open-source-2D-level-editor.aspx Written Version of Above Tutorials]
 +
 
  
 
===New Tiled Map===
 
===New Tiled Map===
Line 28: Line 45:
  
 
[[File:Plat player object.gif]]
 
[[File:Plat player object.gif]]
 +
 +
==MonoGame Project==
 +
Create a new MonoGame project, mine is a Windows project.
 +
 +
===Setup Square.Tiled===
 +
If you have a project ready, create a new class in your project. Click project and new class and call it Tiled.cs, then copy the code from this document over the code in your new class: [[Square.Tiled Class]]
 +
 +
Remember to set the name space to Squared.Tiled.
 +
 +
You will need to add references in the using section for the following:
 +
 +
<syntaxhighlight lang=csharp>
 +
using System.IO;
 +
using Squared.Tiled;
 +
</syntaxhighlight>
 +
 +
==Code to Display Map==
 +
===Map Variables===
 +
 +
At the top of your Game1 class add these additional variables:
 +
<syntaxhighlight lang=csharp>
 +
Map map;
 +
Layer collision;
 +
Vector2 viewportPosition;
 +
int tilepixel;
 +
</syntaxhighlight>
 +
 +
===LoadContent for map===
 +
 +
In the LoadContent method add the following lines to load the map, the collision layer and to set the texture of the player. The variable tilepixel assumes your tiles are square, the number of pixels is taken from the map:
 +
 +
<syntaxhighlight lang=csharp>
 +
map = Map.Load(Path.Combine(Content.RootDirectory, "SimpleRPG.tmx"), Content);
 +
collision = map.Layers["Collision"];
 +
tilepixel = map.TileWidth;
 +
map.ObjectGroups["objects"].Objects["Player"].Texture = Content.Load<Texture2D>("hero");
 +
</syntaxhighlight>
 +
 +
===The Update Method===
 +
 +
You will also need to update the viewportPosition, this will center the map onto the player:
 +
 +
<syntaxhighlight lang=csharp>
 +
viewportPosition= new Vector2(map.ObjectGroups["objects"].Objects["Player"].X - (graphics.PreferredBackBufferWidth/2), map.ObjectGroups["objects"].Objects["Player"].Y - (graphics.PreferredBackBufferHeight/2));
 +
</syntaxhighlight>
 +
 +
===The Draw Method===
 +
Add the following to the draw method to draw the map and hero to the screen.
 +
 +
If you already have spriteBatch.Begin() or spriteBatch.End() then just place the middle line inbetween your lines.
 +
 +
<syntaxhighlight lang=csharp>
 +
spriteBatch.Begin();
 +
map.Draw(spriteBatch, new Rectangle(0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height), viewportPosition);
 +
spriteBatch.End();
 +
</syntaxhighlight>
 +
 +
At this point your project should run an display your map centered onto the player.

Revision as of 16:11, 25 November 2017

This will show you how to create a platform game using a tiled map, and tile based collision detection.

Create Map

Tiled

You will firstly need to install the Tiled program from the website and link below. In college the Tiled executeables are on moodle, under project, technical skill, monogame, and tiled. I have also added links to other tutorials for using Tiled.

Tiled Website and Download

Tiled Map Editor

Tutorials for using Tiled

Offical Tiled Tutorials

Tiled Basics

Tiled Youtube Playlist Series

Written Version of Above Tutorials


New Tiled Map

You will need a new tiled map, the tile size in the screen shot is 128 pixels, in the end i actually changed this to 32 x 32 and resized the tiles accordingly:

Plat new map.gif

It is important to change the format of the map to Base64 gzip compressed:

File:Plat tile layer format.gif

Add Tile Set

Now your map is created we need to add a tile set:

New tileset.gif

In creating this tutorial i first tried a tileset based upon a collection of images, this seemed fine in Tiled but failed to draw using Square.Tiled. So make sure you choose embed and based on tileset image:

Draw Your Level

Now you have a tile set build a simple set of platforms. You should rename the layer to something like Tiles:

Plat simple map.gif

Add Player Object

Now you have a section of platforms, we can now set the position of the player. This will also be the object moved by the code and player input. So insert an object layer, and then use the rectangle tool to create the object:

Plat player object.gif

MonoGame Project

Create a new MonoGame project, mine is a Windows project.

Setup Square.Tiled

If you have a project ready, create a new class in your project. Click project and new class and call it Tiled.cs, then copy the code from this document over the code in your new class: Square.Tiled Class

Remember to set the name space to Squared.Tiled.

You will need to add references in the using section for the following:

using System.IO;
using Squared.Tiled;

Code to Display Map

Map Variables

At the top of your Game1 class add these additional variables:

Map map;
Layer collision;
Vector2 viewportPosition;
int tilepixel;

LoadContent for map

In the LoadContent method add the following lines to load the map, the collision layer and to set the texture of the player. The variable tilepixel assumes your tiles are square, the number of pixels is taken from the map:

map = Map.Load(Path.Combine(Content.RootDirectory, "SimpleRPG.tmx"), Content);
collision = map.Layers["Collision"];
tilepixel = map.TileWidth;
map.ObjectGroups["objects"].Objects["Player"].Texture = Content.Load<Texture2D>("hero");

The Update Method

You will also need to update the viewportPosition, this will center the map onto the player:

viewportPosition= new Vector2(map.ObjectGroups["objects"].Objects["Player"].X - (graphics.PreferredBackBufferWidth/2), map.ObjectGroups["objects"].Objects["Player"].Y - (graphics.PreferredBackBufferHeight/2));

The Draw Method

Add the following to the draw method to draw the map and hero to the screen.

If you already have spriteBatch.Begin() or spriteBatch.End() then just place the middle line inbetween your lines.

spriteBatch.Begin();
map.Draw(spriteBatch, new Rectangle(0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height), viewportPosition);
spriteBatch.End();

At this point your project should run an display your map centered onto the player.