Game: omgaan met tijd (Jewel-Jam)

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Hoofdstuk 6: Controle structuren
Hoofdstuk 2 Hallo, C# !.
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoorcollege 13 Animatie, game physics. De speler Wordt aangestuurd via toetsenbord Kent verschillende soorten bewegingen Rennen Stilstaan Springen Doodgaan.
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
Hoorcollege 5 Herhaling, game object interactie. Ball class class Ball { Texture2D colorRed, colorGreen, colorBlue; Texture2D currentColor; Vector2 position,
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Hoorcollege 2 Basis gameprogrammeren. Soorten programma’s Console- applicatie.
Hoorcollege 14 Vijanden, excepties. Overzicht programmaconstructies Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for(each)-opdracht.
Hoorcollege 4 Objecten en methoden. Eigen methode toevoegen class Painter : Game { public void HandleInput() { … } protected override void Update(GameTime.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoorcollege 3 Game assets, Invoer verwerken. Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731.
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Animatie & Game Physics
Partial Classes, Enemies, Exceptions
Game Object Structuren
Objectgeoriënteerd Programmeren (2)
ISensorEventListener
1e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Overerving
Gameprogrammeren: Char en String
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Variabelen, declaraties en toekenningen
Gameprogrammeren: Expressies
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Programmastructuur
Basis Gameprogrammeren
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Afsluiting
Gameprogrammeren: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Properties
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Gameprogrammeren: Recursie
Gameprogrammeren: Abstracte klassen
Willekeurigheid en Herhaling
Gameprogrammeren: Interfaces
Arjan Egges Paul Bergervoet Wouter van Toll
Gameprogrammeren: Tiles en File I/O in Tick Tick
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Object Communication (Jewel Jam)
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Gameprogrammeren: Arrays
Transcript van de presentatie:

Game: omgaan met tijd (Jewel-Jam) Arjan Egges Paul Bergervoet Wouter van Toll

Omgaan met tijd Hoe vaak wordt Update/Draw eigenlijk aangeroepen? Twee mogelijkheden: Zo vaak mogelijk Op vaste tijdstippen (bijv. een aantal keer per seconde)  fixed time step Standaard wordt de tweede optie gebruikt Update+Draw 60 keer per seconde

Omgaan met tijd Twee soorten tijd in de GameTime klasse: Real time Total real time = echte tijd verstreken sinds de start van het spel Total game time = tijd verstreken afhankelijk van het aantal updates Game tijd vertraagt bij moeilijke berekeningen!

Echte tijd gaat door, game tijd vertraagt! Omgaan met tijd Voorbeeld bij fixed time step = 10ms: TotalGameTime TotalRealTime Update 10ms 10ms Draw 20ms 20ms Update 30ms 30ms Draw 40ms 40ms Update Echte tijd gaat door, game tijd vertraagt! 50ms 70ms Draw 60ms 80ms

De TimeSpan klasse Properties: Methoden: TotalMilliseconds TotalSeconds Milliseconds Seconds Minutes Etc. Methoden: Add, Subtract, en nog een paar

Gebruikmaken van tijd Subklasse van GameObject Zichtbaarheid beheren class VisibilityTimer : GameObject { protected GameObject target; protected float timeleft; protected float totaltime; public VisibilityTimer(GameObject target, int layer=0, string id = "") : base(layer, id) totaltime = 1; timeleft = 0; this.target = target; } ... Subklasse van GameObject Zichtbaarheid beheren van een doelobject 1 seconde laten zien

Gebruikmaken van tijd Overgebleven tijd neemt af public override void Update(GameTime gameTime) { timeleft -= (float)gameTime.ElapsedGameTime.TotalSeconds; if (timeleft <= 0) target.Visible = false; } public override void Reset() { ... } public void StartVisible() timeleft = totaltime; target.Visible = true; Overgebleven tijd neemt af Object zichtbaar maken

Game wereld uitbreiden SpriteGameObject dOvrly = new SpriteGameObject("spr_double", 1); dOvrly.Position = new Vector2(800, 400); VisibilityTimer dTmr = new VisibilityTimer(dOvrly, 0, "doubleTimer"); this.Add(dOvrly); this.Add(dTmr); SpriteGameObject tOvrly = new SpriteGameObject("spr_triple", 1); tOvrly.Position = new Vector2(800, 400); VisibilityTimer tTmr = new VisibilityTimer(tOvrly, 0, "tripleTimer"); this.Add(tOvrly); this.Add(tTmr);

(Drie)dubbele combinaties int nrCombis = 0; if (IsValidCombination((Jewel)grid[middleCol, i], (Jewel)grid[middleCol, i + 1], (Jewel)grid[middleCol, i + 2])) { ... nrCombis++; i = 0; } else i++;

(Drie)dubbele combinaties if (nrCombis == 1) JewelJam.AssetManager.PlaySound("snd_combi"); else if (nrCombis == 2) { score.Score += 50; VisibilityTimer v = GameWorld.Find("doubleTimer") as VisibilityTimer; doubleTimer.StartVisible(); JewelJam.AssetManager.PlaySound("snd_double"); } else if (nrCombis == 3) score.Score += 100; VisibilityTimer v = GameWorld.Find("tripleTimer") as VisibilityTimer; tripleTimer.StartVisible(); JewelJam.AssetManager.PlaySound("snd_triple");

Glitters We definieren een klasse GlitterField Die krijgt een target texture (sprite) Willekeurige glitter sprites afbeelden bovenop de target sprite Maar alleen op plekken waar de sprite niet doorzichtig is!

GlitterField klasse class GlitterField : GameObject { protected List<Vector2> positions; protected List<float> scales; protected int width, height, xoffset; protected Texture2D glitter; protected Texture2D target; … }

Willekeurige positie berekenen public Vector2 CreateRandomPosition() { Vector2 randomPos = Vector2.Zero; while (true) randomPos = new Vector2(JewelJam.Random.Next(width), JewelJam.Random.Next(height)); Rectangle sourceRectangle = new Rectangle((int)randomPos.X + xoffset, (int)randomPos.Y, 1, 1); Color[] retrievedColor = new Color[1]; target.GetData<Color>(0, sourceRectangle, retrievedColor, 0, 1); if (retrievedColor[0].A == 255) break; } return randomPos; Pixeldata opvragen “stop de oneindige while loop”

Update methode public override void Update(GameTime gameTime) { for (int i = 0; i < scales.Count; i++) { if (scales[i] == 0 && JewelJam.Random.NextDouble() < 0.001) scales[i] += 0.05f; else if (scales[i] != 0) if (scales[i] >= 2.0f) scales[i] = 0f; positions[i] = this.CreateRandomPosition(); }

Draw methode public override void Draw(GameTime gameTime, SpriteBatch s) { Vector2 glitterCenter = new Vector2(glitter.Width, glitter.Height) / 2; for (int i = 0; i < scales.Count; i++) float scale = scales[i]; if (scales[i] > 1) scale = 2 - scales[i]; s.Draw(glitter, this.GlobalPosition + positions[i], null, Color.White, 0f, glitterCenter, scale, SpriteEffects.None, 0); }