Return ohne Gosub
Übersicht

nebelhornBetreff: Return ohne Gosub |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich arbeite zur Zeit an einem Jump'n Run Spiel. Ist auch schon fast fertig und jetzt mache ich gerade den Leveleditor. Das sieht bis jetzt so aus:
Code: [AUSKLAPPEN] ;Grundsätzliche Dinge Include "Engine.bb" Graphics 640,480 SetBuffer BackBuffer() ;Graphiken laden ;Hier werden die Graphiken geladen(nicht wichtig für das Problem) Goto Hauptschleife End ;Level laden ;----------- .LadeLevel ;Jede Menge Code der jetzt nicht wichtig ist. Return ;Hauptschleife .Hauptschleife Repeat ;Eingaben Auswerten If KeyDown(60) Then Repeat LevelNr$ = Input(100,100,LevelNr) Gosub Anzeigen Until KeyDown(28) Gosub LadeLevel EndIf ;Ausgabe .Anzeigen Hier sollen Später die Anzeigen hinkommen Return Until KeyDown(1) Jetzt kommt wenn das Programm zu dem Return nach dem Anzeigen kommt immer die Meldung "Programm has ended" (im Debug Modus) Eigentlich soll das Programm einfach so weitelaufen und nur wenn es von dem Gosub gekommen ist dorthin zurückspringen. Die Input() Version ist übrigens so in Engine.bb: Code: [AUSKLAPPEN] Function Input$(bx,by,b$="") A = GetKey() If A > 31 Then Name$ = Name$ + Chr$(A) If (A=8) And Len(Name$)>0 Then Name$ = Left$(Name$,Len(Name$)-1) Text 150,100,Name$ + "_" Return Name$ End Function |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi....
die SubRutinen gehören nicht in die Haubtschleife. Das Return in der Hauptschleife beändet das Programm. Code: [AUSKLAPPEN] ;Hauptschleife .Hauptschleife Repeat ;Eingaben Auswerten If KeyDown(60) Then Repeat LevelNr$ = Input(100,100,LevelNr) Gosub Anzeigen Until KeyDown(28) Gosub LadeLevel EndIf Until KeyDown(1) end ;Ausgabe .Anzeigen Hier sollen Später die Anzeigen hinkommen Return |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit Return springst du immer einen Sub nach oben...:
Code: [AUSKLAPPEN] Gosub bla1
Return .Bla1 Gosub bla2 Return .bla2 Return Das strukturiert dein Programm wie folgt: Code: [AUSKLAPPEN] +<Hauptprogram>
+-+bla1 | +-+bla2 | | | Immer wenn ein Programm bei dem Return ankommt springt es eine Ebene nach oben... das geht solange gut bis du ihm sagst "Springe von der Hauptprogrammebene eine hoch" Das beendet nunmal dein programm. |
||
nebelhorn |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aha, vielen Dank für die schnelle Antwort!
Das hatte ich in keiner Hilfe gefunden, da stand immer nur "erzeugt keine Fehlermeldung". |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ---
bei Blitz haste zumindest nicht das Problem. Das bei einem solchen Fehler das System einen MAV erzeugt. gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
...am besten solltest du dir goto und gosub aber wieder ganz schnell abgewöhnen ![]() |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ...
Böse???? ich würde eher antiquirt sagen. Ich nutze es trotzdem. Hatte noch nie Probleme damit. Gruss TFT PS: Wenn man folgende dinge beachtet. 1. Nicht aus For Next Schleifen mit Goto raus. Dazu nimmt man Exit. 2. Kein Goto aus Functionen herraus. Böse !!!! 3. Kein Goto aus einem Einsprung in eine SubRutine die mit Gosub angesprungen wurde. Das gibt verwirrung.......... In grossen und ganzen gibt es einiges zu beachten. ........ Also dann lieber kein Goto ......... |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
tft hat Folgendes geschrieben: 1. Nicht aus For Next Schleifen mit Goto raus. Dazu nimmt man Exit.
Huh, gerade das ist bei mir aber einer der Hauptanwendungszwecke für Goto... Wenn ich irgendwo drei ineinanderverschachtelte Schleifen habe, (z.B. For-Each-Schleifen, zwecks Suche nach einem Objekt, die beim ersten Fund abbrechen soll), dann schreibe ich lieber einmal Goto als dreimal Exit. |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi....
sicher funktioniert das..... Aber das sorgt gelegentlich für komische effecte beim abarbeiten des Code. Da werden dann Code Teile ausgefürt. Die da nicht hingehören. Das muss mit dem Compiler zusammenhängen. Hatte da schon einige schlaflose Nächte wegen solchem mist. Goto .. innerhalb eines bestimmten Blocks und nicht zu weit vom Sprung entfernt funktioniern immer. Aber sobald mann das ganze zu extrem macht. Und dabei aus Schleifen springt. Gibts manchmal unerklärliches verhalten. If x=1 to 100 if y=1 to 100 if z=1 to 100 c=1 if y=5 And z=7 Then Exit c=0 next if c=1 then Exit next if c=1 then exit next Es gibt natürlich auch andere Möglichkeiten das zu lösen. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibts in BB keine LoopLabels? | ||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ...
wie meinst du das ? Labes sind Labels, die können mit Goto geloopt sein. .Main Code Goto Main Aber allgemein benutzt man dazu Repeat Code Forever Da man aber meist eine Abbruchbedingung benötigt. Wird Repeat Code Until KeyHit(1) oder änliches verwendet. Es gibt natürlich auch While/Wend Schleifen. Genaueres gibts in der Hilfe nachzulesen. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] #Loop2
For Local x:Int = 0 Until 128 For Local y:Int = 0 Until 128 If map[x,y] = 15 Then Exit Loop2 Next Next So kenne ich das aus BMax |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group