GameState Overgang
Goedemiddag!
Op dit moment ben ik bezig met mijn minor, en hiervoor ben ik een kleine Game Frameworkje aan het maken in JavaScript. Echter loop ik tegen het volgende probleem aan:
Stel ik heb 2 levels: "Level 1" en "Level 2". In "Level 1" bevinden zich een "Player" object en een "Enemy" object.
Het updaten en tekenen van deze objecten wordt per frame in deze volgorde uitgevoerd:
Stel nu dat in enemy.update() aan een voorwaarde wordt voldaan waardoor naar "Level 2" moet worden gegaan, waar laat ik dan de daadwerkelijke overgang plaatsvinden? Met andere woorden; als enemy.update() ervoor zorgt dat naar "Level 2" wordt gegaan, zouden player.render() en enemy.render() dan nog moeten worden uitgevoerd?
Als voorbeeld heb ik gekeken naar Phaser.io en daar wordt een overgang tussen 2 "levels" gescheduled en aan het begin van het volgende frame uitgevoerd:
Ook heb ik GameMaker als voorbeeld genomen, hier wordt een overgang meteen na de method uitgevoerd:
Mijn vraag is dus; wat is de beste plaats om van "level" te wisselen.
Ik hoop dat mijn vraag een beetje duidelijk is.
Alvast bedankt!
Op dit moment ben ik bezig met mijn minor, en hiervoor ben ik een kleine Game Frameworkje aan het maken in JavaScript. Echter loop ik tegen het volgende probleem aan:
Stel ik heb 2 levels: "Level 1" en "Level 2". In "Level 1" bevinden zich een "Player" object en een "Enemy" object.
Het updaten en tekenen van deze objecten wordt per frame in deze volgorde uitgevoerd:
Stel nu dat in enemy.update() aan een voorwaarde wordt voldaan waardoor naar "Level 2" moet worden gegaan, waar laat ik dan de daadwerkelijke overgang plaatsvinden? Met andere woorden; als enemy.update() ervoor zorgt dat naar "Level 2" wordt gegaan, zouden player.render() en enemy.render() dan nog moeten worden uitgevoerd?
Als voorbeeld heb ik gekeken naar Phaser.io en daar wordt een overgang tussen 2 "levels" gescheduled en aan het begin van het volgende frame uitgevoerd:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"Level 1":
player.update()
enemy.update()
player.render()
enemy.render()
player.update()
enemy.update() > Schedule overgang naar "Level 2"
player.render()
enemy.render()
> Overgang vindt plaats
"Level 2":
...
player.update()
enemy.update()
player.render()
enemy.render()
player.update()
enemy.update() > Schedule overgang naar "Level 2"
player.render()
enemy.render()
> Overgang vindt plaats
"Level 2":
...
Ook heb ik GameMaker als voorbeeld genomen, hier wordt een overgang meteen na de method uitgevoerd:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
"Level 1":
player.update()
enemy.update()
player.render()
enemy.render()
player.update()
enemy.update() > Schedule overgang naar "Level 2"
> Overgang vindt plaats
"Level 2":
...
player.update()
enemy.update()
player.render()
enemy.render()
player.update()
enemy.update() > Schedule overgang naar "Level 2"
> Overgang vindt plaats
"Level 2":
...
Mijn vraag is dus; wat is de beste plaats om van "level" te wisselen.
Ik hoop dat mijn vraag een beetje duidelijk is.
Alvast bedankt!
Ik zou naar het volgende level gaan wanneer aan een voorwaarde wordt voldaan. Bijvoorbeeld door 1 speler te "doden" (Weet voor de rest niet wat voor spel je precies hebt) wordt level 2 geactiveerd, hierdoor tel je dus hoeveel spelers gedood zijn. Zo kun je ook makkelijk level 2 en 3 maken door te laten tellen naar bijvoorbeeld 2 in level 2 en 3 in level 3.
Wat je nu dus eigenlijk wil/doet, (Ik weet ook niet wat je enemy.update() doet, als er 1 gedood is naar het volgende level?
Ook kan je per kill punten laten tellen, bij zoveel punten naar het volgende level etc.
Of ik begrijp je vraag helemaal verkeerd ;)
Wat je nu dus eigenlijk wil/doet, (Ik weet ook niet wat je enemy.update() doet, als er 1 gedood is naar het volgende level?
Ook kan je per kill punten laten tellen, bij zoveel punten naar het volgende level etc.
Of ik begrijp je vraag helemaal verkeerd ;)
Dat is inderdaad niet wat ik bedoelde, maar dat komt ook vooral omdat ik het "probleem" nogal moeilijk kan omschrijven.
Elk frame in de game bestaat uit het updaten en renderen van objecten, bijvoorbeeld:
Stel dat in "object3.update()" de volgende pseudocode staat:
In bovenstaand voorbeeld wordt "goToLevel" aangeroepen wat er voor moet zorgen dat naar level 2 moet worden gegaan. Maar wanneer moet dit worden gedaan?
Een mogelijkheid is om dit meteen te doen, maar de code erna zal dan nog steeds worden uitgevoerd, echter niet in het juiste level.
Een tweede mogelijkheid is om de daadwerkelijke overgang naar een ander level aan het begin van elk frame te doen.
Nu wil ik dus graag weten wat de meest gebruikte / meest efficiënte manier is.
Elk frame in de game bestaat uit het updaten en renderen van objecten, bijvoorbeeld:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
object1.update()
object2.update()
object3.update()
object1.render()
object2.render()
object3.render()
object2.update()
object3.update()
object1.render()
object2.render()
object3.render()
Stel dat in "object3.update()" de volgende pseudocode staat:
In bovenstaand voorbeeld wordt "goToLevel" aangeroepen wat er voor moet zorgen dat naar level 2 moet worden gegaan. Maar wanneer moet dit worden gedaan?
Een mogelijkheid is om dit meteen te doen, maar de code erna zal dan nog steeds worden uitgevoerd, echter niet in het juiste level.
Een tweede mogelijkheid is om de daadwerkelijke overgang naar een ander level aan het begin van elk frame te doen.
Nu wil ik dus graag weten wat de meest gebruikte / meest efficiënte manier is.
Gewijzigd op 06/10/2016 15:47:34 door Lord Gaga
Lord Gaga op 05/10/2016 15:25:07:
Stel nu dat in enemy.update() aan een voorwaarde wordt voldaan waardoor naar "Level 2" moet worden gegaan, waar laat ik dan de daadwerkelijke overgang plaatsvinden?
Daarvoor kennen we bijvoorbeeld het observer pattern.
In JavaScript kun je daarvoor een callback bij de wijziging van een state gebruiken




