Von einer Funktion direkt vor die Hauptschleife springen....
Übersicht

Blitzkrieg BopBetreff: Von einer Funktion direkt vor die Hauptschleife springen.... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi di ho Leute!
Folgendes Prob: In einem kleinen Menü, was in einer Funktion abgespeist ist, soll man bei einer bestimmten Auswahl direkt vor die Hauptschleife springen. Obwohl Goto nicht das beste ist, habe ich es mit Goto versucht zu realisieren, doch das geht nicht...hier mal mein Pseudocode, wie ich das aufgebaut habe: Code: [AUSKLAPPEN] Graphics 800,600,16,2 Setbuffer Backbuffer() .start Repeat Cls Auswahl() Flip Forever Function Auswahl() If Keyhit(28) Goto start Endif End Function Naja, wie gesagt es erscheint beim Versuch das Prog zu starten der Fehler Zitat: Undefined label Also meine Frage, was mache ich falsch oder wie kann man es eleganter lösen? MFG b.bop |
||
~ Hey Ho Let's Go ~ |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 800,600,16,2
Setbuffer Backbuffer() .start Repeat Cls if Auswahl() then neustart = 1 : exit Flip Forever if neustart then neustart = 0 :goto start Function Auswahl() If Keyhit(28) then return true End Function was ist denn beim Label start, sind da nur variablen die eingestellt werden müssen oder was genau soll da passiereren das du rekursiv immer aus der schleife springen willst? |
||
[BB2D | BB3D | BB+]
|
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ne also es geht darum, das am Anfang immer halt Ladezeiten vorliegen, weil Objekte gedreht werden müssen.
Und wenn man Tot ist, soll man sich aussuchen können, ob man nochmal spielt oder beendet, dein Code ,Ralli, geht net! |
||
~ Hey Ho Let's Go ~ |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich sehe nicht wirklich einen Grund warum man das so extrem umständlich und schludrig lösen sollte.
Ne globale Variable, die den aktuellen Modus angibt und in der Hauptschleife ne entsprechende Select - Case variante wäre eine möglichkeit das zu machen oder eine hauptschleife die je nach befehl funktionen aufruft, die ihrerseits hauptschleifen beinhaten. zb ne funktion MainMenu(), PlayGame(), LoadData() und so weiter. ich empfehle goto dringendstens zu vermeiden, denn es wird das programm nicht schön machen, zum debuggen wirds noch schlimmer und es sieht einfach schludrig aus und zeigt mangelndes abstraktes denken |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du die bilder doch schon geladen und gedreht hast brauchst du das doch nicht nochmal machen oder ist das soviel an Grafik das du die immer während des Spiels rausschmeissen must!?
normalerweise brauchst du nur die variablen zurücksetzten ! Übrigens der Codeschnipsel geht so wie er da steht..... das von Dreamora ist schon ganz gut |
||
[BB2D | BB3D | BB+]
|
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm, deshalb will ich ja springen, damit man die grafiken net nochmal laden muss!
aber irgendwie versteh ich den lösungsweg net ![]() |
||
~ Hey Ho Let's Go ~ |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann lies Robs Tut. Ich weiß nicht was daran so schwer zu verstehen sein soll ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
naja, ich hab die ganze repeat/forever schleife in eine if abfrage gehüllt, ist aber auch net das wahre oder? | ||
~ Hey Ho Let's Go ~ |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum sollte man net? Ist etwas ganz normales ![]() Das war das, was ich eigentlich mit den Funktionen die ihrerseits "Mainloops" haben versucht habe zu sagen. Je nach situation läuft eine andere mainloop. Umgekehrt kannst du eine "Zustandsvariable" machen und ein Select - case und während die mainloop abläuft wird je nach programmzustand ( menu, spiel, highscore oder was weiss ich ) ein anderer teil ausgeführt sprich der jeweilige select - case block halt. is geschmackssache welche der zwei varianten man vor zieht. was definitiv net reingehört ist ein goto |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay...ich möcht die Möglcikeit wäheln, eine If Schleife um die Main-Loop
zu setzten. Wer kann das an diesem Beispiel optimieren? (Variablen etc. sehr schnell geschrieben und ansonsten auch eventuell umständlcih gecodet, aber auf den Sinn kommt es an.) Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global auswahl_temp = 1 , start = 1 , test Const hoch = 200 , runter = 208 If start = 1 Repeat Cls For i = 1 To 30 Step 2 Plot Rand(0,800),Rand(0,600) Next If KeyHit(57) a = True EndIf If a = True Auswahl() EndIf Text 0,0,"Test:"+test Text 0,50,"start:"+start Text (800/2),(600/2)-200,"Drücke Leer für das Menü",1 Flip Until KeyHit(1) : End EndIf Function Auswahl() start = 5 Cls If auswahl_temp = 1 Color 255,0,255:Rect (800/2)-50,(600/2),100,15,0 EndIf If auswahl_temp = 2 Color 255,0,255:Rect (800/2)-50,(600/2)+100,100,15,0 EndIf If KeyHit(hoch) auswahl_temp = auswahl_temp - 1 EndIf If KeyHit(runter) auswahl_temp = auswahl_temp + 1 EndIf If auswahl_temp > 2 Then auswahl_temp = 1 If auswahl_temp < 1 Then auswahl_temp = 2 If KeyHit(28) test = 1 EndIf If auswahl_temp = 1 And test = 1 start = 1 EndIf If auswahl_temp = 2 And test = 1 End EndIf Color 255,255,255:Text (800/2),(600/2),"Start",1 Color 255,255,255:Text (800/2),(600/2)+100,"Ende",1 End Function MFG |
||
~ Hey Ho Let's Go ~ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group