Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

11

29.03.2010, 21:02

Ich würde da eher einfach die Update und Render Sachen trennen. Dann kannst du nämlich ganz bequem mit einem Funktionsaufruf das updaten ausschalten und trotzdem genau gleich weiter rendern.

Dann kannst du immer noch einfach in der Render Funktion checken, ob jetzt noch ein Schriftzug gezeichnet werden soll oder nicht.

little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

12

29.03.2010, 21:18

jo mal schauen.

ich muss es jetzt erstmal schaffen überhaupt text auf den bildschirm zu bekommen.

13

30.03.2010, 08:29

Ich würde einfach um alles, was in der Pause-Funktion nicht mehr ausgeführt werden soll folgendes drum machen:

C-/C++-Quelltext

1
2
3
4
5
6
if(!KEY_P_PRESSED){
//...hier kommt dann dein Code, der dann nicht mehr ausgeführt werden soll
}
else {
//und hier lässt du den Pausetext entstehen
}

-=Andreas=-

unregistriert

14

30.03.2010, 11:38

Statt SDLK_p könntest du auch SDLK_PAUSE verwenden!

little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

15

30.03.2010, 14:00

SDLK_PAUSE kenn ich nich aber ich hab es so gemacht, wie Brainsmith es vorgeschlagen hat.



C-/C++-Quelltext

1
2
3
4
5
6
if(!KEY_P_PRESSED){
//...hier kommt dann dein Code, der dann nicht mehr ausgeführt werden soll
}
else {
//und hier lässt du den Pausetext entstehen
}


Nur halt das ich eine bool Variable deklariert hab und diese beim drücken in der ProcessEvent Funktion auf "true" gesetzt wird.
Diese wird dann nur noch beim durchlaufen der Hauptschleife geprüft und so klappts auch.

16

30.03.2010, 14:03

Zitat

Statt SDLK_p könntest du auch SDLK_PAUSE verwenden!
Würde sich wahrscheinlich nicht so anbieten ;) Der Durchschnittszocker, klickt zuerst auf ESC / P / ... bis er auf die Idee kommt den kleinen Pause-Knopf zu drücken ;)

-=Andreas=-

unregistriert

17

30.03.2010, 15:04

Was ja auch wichtig ist das die Asteroiden und Schüsse nach der Pause noch an der selben Stelle sind. Dazu habe ich in die Timer Klasse noch eine Variable m_fPauseTime eingefügt die während der Pause erneuert wird (also m_fPauseTime = SDL_GetTicks() / 1000.0f - m_fLastTime; ) Die m_fCurTime errechnet sich dann aus SDL_GetTicks() / 1000.0f - m_fPauseTime;. In der Game.cpp Datei habe ich dann eine Variable m_bGamePause eingefügt. Wenn diese Variable wahr ist wird eine while-Schleife so lange durchlaufen wie nicht Pause (bzw. Esc oder p) gedrückt wurde. In dieser while Schleife wird dann auch auf eine Funktion in der CTimer Klasse zugegriffen (über g_pFramework) welche die m_fPauseTime updatet.



Gruß -=Andreas=-

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-=Andreas=-« (04.04.2010, 00:14)


little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

18

30.03.2010, 15:36

Das mit dem das die an ort und stelle bleiben hat bis jetzt ganz gut geklappt aber mal schauen wenn ich da noch was verändere denk ich ma wird da eh wieder was schief laufen und dann werde ich es wohl so ändern wie du.

Jetzt hab ich es auch schon wieder geschafft -.-' habe eben die Flip funktion wieder aktiviert egal ob pause oder nich und "ZACK" jetzt hat sich mein Visual Studio dermaßen aufgehängt das nur noch neustart reicht... naja heute zum ersten mal ^^

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

19

30.03.2010, 15:42

Wieso probierst du es eigentlich nichtmal ganz allgemein mit GameStates?
Eine "Pause" heißt doch für dein Spiel de facto nur, dass kein einziges Sprite geupdatet wird und ggf. (z.B. in nem Menü) nichts von denen gerendert wird. Mehr nicht. Eine Pause vonwegen "SDL läuft nicht mehr" ist doch denke ich nicht das zu erreichende Ziel, oder?

Du könntest verschiedene Funktionen schreiben die jeweils andere Sachen erfüllen, die eine zeichnet/updatet das Spiel, die andere das Menü. Je nach Gamestate wird dann evtl. über ne switch/case Abfrage die entsprechende Funktion aufgerufen. Das Framework clearen, updaten & flippen musst du so oder so immer(da das Ganze sonst gar nicht funktioniert.)
WIP Website: kevinheese.de

little_Progger

Treue Seele

  • »little_Progger« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

20

30.03.2010, 16:42

ich denke ich werde jetzt nochmal pause und text aus dem spiel ganz entfernen und dann mal die gesamte Run Funktion oder besser die Hauptschleife aufräumen den so schmiert mir nur reihen weise mein pc ab und dann hilft nur noch neustart was schon nicht mehr normal ist das mir vista schon gar keine meldung von wegen "Programm reagiert nicht" schreibt, sondern einfach gar nichts mehr macht.
Das supergau wäre ein kaputtes system!

Ich melde mich hier nachher mal wenn ich erste Ergebnisse erzielt hab.

Ach KeksX ich wollte ma fragen ob deine Textausgabe Funktioniert weil ich habe meine weitesgehend von dir übernommen nur das ich das rendern der Sprite.cpp überlasse aber es kommt kein Text auf den Bildschirm.

-----
Ach und ich wusste nicht mal das ich ne "Pause/Untbr" Taste auf meinem Laptop hab :D

Werbeanzeige