Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdThijmen van Loon Laatst gewijzigd meer dan 6 jaar geleden
1
Gameprogrammeren: Tiles en File I/O in Tick Tick
Arjan Egges Paul Bergervoet Wouter van Toll
2
Tiles Veel games gebruiken tiles om werelden/levels/puzzels voor te stellen
3
Voorbeeld van een Tile-klasse
enum TileType { Normal, Background, Wall }; class Tile : SpriteGameObject { protected TileType type; public Tile(string asset, int layer = 0, string id = "", int sheetIndex = 0) : base(asset, layer, id, sheetIndex) type = TileType.Normal; }
4
Voorbeeld van een Tile-klasse
public override void Draw(GameTime gameTime, SpriteBatch s) { if (type == TileType.Background) return; base.Draw(gameTime, s); } public TileType TileType get { return type; } set { type = value; }
5
Tick Tick Resterende tijd Exit Speler Wall tile Waterdruppel
Background tile Achtergrondlagen
6
Opbouw van de game Levels worden geladen uit een tekstbestand
We hebben verschillende soorten game-objecten De speler Vijanden Waterdruppels Tiles Overlays
7
Levels en tiles X.. ########## #### ### WWWWW... #####... .... ....### W.W.W.W.W. #################### Eind van het level Achtergrondtile Waterdruppel Walltile Startpositie van de speler
8
Na het laden van het level
9
Levels uit een file lezen
Voordelen: Levels worden onafhankelijk van de game-code geproduceerd Makkelijk nieuwe levels toe te voegen Makkelijker om te testen Nadelen: Levels kunnen door iedereen ge-edit worden (makkelijker om vals te spelen) Extra code nodig om levels uit files te lezen Misschien zelfs een speciale level-editor nodig
10
Levels uit een file lezen
private void LoadTiles(string path) { // lees het level in List<string> tekstlines = new List<string>(); StreamReader fileReader = new StreamReader(path); string line = fileReader.ReadLine(); int width = line.Length; while (line != null) tekstlines.Add(line); line = fileReader.ReadLine(); } // maak alle tiles … Een List om alle gelezen regels in te bewaren. We gebruiken de StreamReader klasse. Lees 1 regel. Blijf lezen totdat er geen regels meer zijn.
11
private void LoadTiles(string path) { // lees het level in …
// maak alle tiles TileField tiles = new TileField(textlines.Count - 1, width, 1, "tiles"); this.Add(tiles); tiles.CellWidth = 72; tiles.CellHeight = 55; for (int x = 0; x < width; ++x) for (int y = 0; y < textlines.Count - 1; ++y) Tile t = LoadTile(textlines[y][x], x, y); tiles.Add(t, x, y); } Subklasse van GameObjectGrid Methode die gegeven een karakter een Tile oplevert.
12
private Tile LoadTile(char tileType, int x, int y) {
switch (tileType) { case '.': return new Tile(); case '-': return LoadBasicTile("spr_platform", TileType.Platform); case 'X': return LoadEndTile(x, y); case 'W': return LoadWaterTile(x, y); case '1': return LoadStartTile(x, y); case '#': return LoadBasicTile("spr_wall", TileType.Normal); default: }
13
Laden van een waterdruppel-tile
private Tile LoadWaterTile(int x, int y) { GameObjectList wd = this.Find("waterdrops") as GameObjectList; GameObjectGrid tiles = this.Find("tiles") as GameObjectGrid; WaterDrop w = new WaterDrop(); w.Origin = w.Center; w.Position = new Vector2(x*tiles.CellWidth, y*tiles.CellHeight - 10); w.Position += new Vector2(tiles.CellWidth, tiles.CellHeight) / 2; wd.Add(w); return new Tile(); }
14
Voortgang van de speler bijhouden
Ander voorbeeld van file I/O in Tick Tick Onthouden welk level is voltooid sinds de vorige keer Level status opslaan in file! false,false true,false
15
Status lezen public void LoadLevelsStatus(string path) {
StreamReader fileReader = new StreamReader(path); for (int i = 0; i < levels.Count; i++) string line = fileReader.ReadLine(); string[] elems = line.Split(','); if (elems.Length == 2) levels[i].Locked = bool.Parse(elems[0]); levels[i].Solved = bool.Parse(elems[1]); } fileReader.Close();
16
Status schrijven public void WriteLevelsStatus(string path) {
StreamWriter fileWriter = new StreamWriter(path, false); for (int i = 0; i < levels.Count; i++) string line = levels[i].Locked.ToString() + "," + levels[i].Solved.ToString(); fileWriter.WriteLine(line); } fileWriter.Close();
17
PlayingState-constructor
Initialiseer de levels Sla op welke al voltooid zijn public PlayingState(ContentManager Content) { currentLevelIndex = -1; levels = new List<Level>(); LoadLevels(Content.RootDirectory + "/Levels/levels.txt"); LoadLevelsStatus(Content.RootDirectory + "/Levels/levels_status.txt"); }
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.