Gosub oder Funktionen?
Übersicht

![]() |
PddBetreff: Gosub oder Funktionen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
Ich bin neu hier und erst seit ein paar tagen kenne ich BlitzBasic. Allerdings muss ich sagen: Ich bin begeistert! Da ich mich mit Delphi auskenne, weis ich, das man allein bei dem Versuch, DirectX zu initialisieren schon scheitern kann (wie ich) und bei OpenGl genauso. Nungut, aber zu meiner Frage: Ich habe heute mein erstes Spiel ersteltt *freu* es ist ein kleines 2D Rennspiel. Nun, wie ich in Rob's BB-Kurs gelesen habe, sollte man Gosub möglichst nicht verwenden! sodern Funktionen! Ich habe allerdings fast nur gosubs verwendet! Klar, es gibt Funktionen wie Car_Move oder Game_init, aber wenn das Spiel beendet ist, dann mach ich das immernoch mit Gosub Level1Ende. Genau so ist es mit den Leveln, die ich (momentan) auch alle noch mit labels versehen habe.... Nun wollte ich euch mal Fragen: ist es besonder schlimm, wenn man Gosub verwendet? Ich finde das nähmlich ziemlich praktisch ![]() ![]() |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi.
Allgemein sagt man, dass man Gosub und goto nur selten verwenden sollte. Es macht meiner Meinung nach den Code sehr unübersichtlich. Functionen kann man schön namen geben, und sie sehr übersichtlich auslagern. Ständiges hermuspringen im Code wird bei langen Programmen doch auf Dauer sehr nervig bei der Fehlersuche. Klar, es ist nich allzuschlimm, diese Befehle zu verwenden(hab ich am Anfang auch gemacht, vor allem weil ichs von QBASIC gewöhnt war) Ich weiß nicht, wie schnell Gosub arbeitet. Ein weiteres Problem ist, dass in einem Codeteil der mit gosub/Return aufgerufen wird, sind die Variablen anders. Eine Variable Speed, ist, wenn sie nicht als Global definiert ist, in einem Unterprogramm mit gosub anders, als im Hauptprogramm. Functions kann man Werte übergeben und bekommt welche zurück. Also ich finde Functions viel schöner und besser. Muss aber jeder selbst entscheiden. MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
#c0rEDaMagE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also Ich verwende eine Mischung aus Funktionen und goto's(ich weiss es ist nicht besonderst gern gesehen), da ich gotos bei Fehleingaben eines Inputs einfach unverzichtbar finde und Auch (noch) keine Andere Möglichkeit kenne die mich vom hocker reisst.
Ich bin allerdings auch noch Anfänger darum solltest du vll doch eher noch auf andere hören ![]() |
||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klasse ![]() btw: Input: Genau so hab ich das gelöst: Code: [AUSKLAPPEN] .NameEingeben SpielerName$ = Input("Gib deinen Namen ein: ") Flip If SpielerName$ <> "" Then gosub Menu Else Gosub NameEingeben EndIf Und ich finde das eigentlich ganz praktisch ![]() |
||
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ein Gosub ist nicht weniger übersichtlich als eine Funktion,
denn die Subroutinen befinden sich (jedenfalls bei mir) auch gesammelt an einem Platz und werden durch ein Return abgeschlossen. Aufgerufen wird eine Subroutine nur mit dem Präfix Gosub und ehrlich gesgt finde ich das nun sehr übersichtlich, da man sofort sieht es ist ein Sprung zu einer Subroutine. Bei einer Funktion sieht man nicht unbedingt on es eine interne Function oder eine eigene oder fremde Function ist besonders wenn sie in .decls für den Editor gekennzeichnet werden. Des weitern müsste ein Aufruf zu einer Subroutine mit Gosub schneller abgearbeitet werden als eine Function, da Compiler intern oft Register vor Aufruf einer Function auf den Stack geschoben werden und nachher wieder gelöscht, da benötigt auch immer etwas Zeit. Darum benutze ich immer Gosub wenn ich keine Variablen übergebe oder zurückerhalten will. Und bei Goto ist es ähnlich, nuir weil früher die Codes sehr unübersichlich waren ohne Labels nur mit Zeilennummern und Schleifen ausser For / Next kaum vorhanden waren hält sich immernoch das Gerücht Goto soll man nie und nimmer verwenden aber Goto ist ein sehr schneller Sprungbefehl und NICHT ZU OFT eingesetzt bleibt auch ein Programm mit Gotos übersichlich. Manchmal sogar übersichtlicher als zu viele verschachtelte Schleifen. .... blabla() ... Gosub Subroutine1 ,,,,, Function blabla() End Function .SubroutineX Return |
||
antome |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pdd hat Folgendes geschrieben: Code: [AUSKLAPPEN] .NameEingeben SpielerName$ = Input("Gib deinen Namen ein: ") Flip If SpielerName$ <> "" Then gosub Menu Else Gosub NameEingeben EndIf Ich hätte das spontan mit einer Schleife gelöst: Code: [AUSKLAPPEN] Global SpielerName$
Repeat SpielerName = Input("Gib deinen Namen ein: ") Until SpielerName <> "" GoSub Menu Das ist kürzer und auch wesentlich besser zu hinterschauen, wenn man nur mal eben über den Code guckt. |
||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
BORNtobeNAMELESS hat Folgendes geschrieben: Ich hätte das spontan mit einer Schleife gelöst: Code: [AUSKLAPPEN] Global SpielerName$
Repeat SpielerName = Input("Gib deinen Namen ein: ") Until SpielerName <> "" GoSub Menu Das ist kürzer und auch wesentlich besser zu hinterschauen, wenn man nur mal eben über den Code guckt. hm ja daran hab ich auch gedacht, aber ich wusste nicht, ob dann (weil das ja wiederholt wird) jedesmal wenn man versucht etwas einzugeben, dann die eingabe wieder überschireben wird, (wenn du verstehst, was ich meine ![]() Ach und wo wir schon dabei sind: Also, da ich nun Pong und ein kleines "Auto"-Spielchen habe, wo man kisten ausweichen muss, will ich nun ein richtiges Autorennen machen, mit einer Strecke, von oben also 2D. Nun muss ich aber zu dem hintergrundbild(die strecke) irgendwie die informationen hinzufügen, wo die strecke befahrbar(teer) ist und wo nicht (bäume, etc). Hat jemand eine Idee, wie ich das machen könnte? |
||
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin,
Zitat: Ach und wo wir schon dabei sind: Also, da ich nun Pong und ein kleines "Auto"-Spielchen habe, wo man kisten ausweichen muss, will ich nun ein richtiges Autorennen machen, mit einer Strecke, von oben also 2D. Nun muss ich aber zu dem hintergrundbild(die strecke) irgendwie die informationen hinzufügen, wo die strecke befahrbar(teer) ist und wo nicht (bäume, etc). Hat jemand eine Idee, wie ich das machen könnte? Ich würde ein TileMap dafür nehmen. z.B.: 1=Strasse, 2=Rasen, 3=Baum, 0=nicht befahrbar 000000000222222222222200000000000 000000000311111111111200000000000 002222220212222222221322222322000 002111120212000000021111111112000 002122122212000000023222222212000 002122111112000000000000000212000 002122222322222232222223222212000 002111111111111111111111111112000 002223222232222322222232222222000 000000000000000000000000000000000 mfg |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
hoi,
war schonmal da, incl. code zum testen: ![]() https://www.blitzforum.de/foru...p;start=20 l8er, psy |
||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Rone hat Folgendes geschrieben: Moin,
Zitat: Ach und wo wir schon dabei sind: Also, da ich nun Pong und ein kleines "Auto"-Spielchen habe, wo man kisten ausweichen muss, will ich nun ein richtiges Autorennen machen, mit einer Strecke, von oben also 2D. Nun muss ich aber zu dem hintergrundbild(die strecke) irgendwie die informationen hinzufügen, wo die strecke befahrbar(teer) ist und wo nicht (bäume, etc). Hat jemand eine Idee, wie ich das machen könnte? Ich würde ein TileMap dafür nehmen. z.B.: 1=Strasse, 2=Rasen, 3=Baum, 0=nicht befahrbar 000000000222222222222200000000000 000000000311111111111200000000000 002222220212222222221322222322000 002111120212000000021111111112000 002122122212000000023222222212000 002122111112000000000000000212000 002122222322222232222223222212000 002111111111111111111111111112000 002223222232222322222232222222000 000000000000000000000000000000000 mfg Hm gute idee! (habs auch schon ausprobiert, auf der rob site gabs nen RPG tut, und da im ersten kapitel stand das drinne...). Gibt es eigentich irgendein Programm, das solche Maps erstellt, weil das von had zu machen ist sehr aufwändig ![]() ![]() |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Blitzcoder hat Folgendes geschrieben: Hi.
Ein weiteres Problem ist, dass in einem Codeteil der mit gosub/Return aufgerufen wird, sind die Variablen anders. Eine Variable Speed, ist, wenn sie nicht als Global definiert ist, in einem Unterprogramm mit gosub anders, als im Hauptprogramm. Eben nicht. Folgendes Programm gibt mir 5 aus: Code: [AUSKLAPPEN] a=5
Gosub blub End .blub Print a Return und genau da liegt der Vorteil von Gosub. Manchmal ist es sinnvoll weniger Globals und stattdessen den Namespace des Hauptprogramms zu benutzen. Zum Beispiel wenn man eine GUI verwendet und in Funktionen die Buttons etc. abfragen will. Dann braucht man bei Funktionen ewig viele Globals - oder man benutzt Gosub. |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Hm gute idee! (habs auch schon ausprobiert, auf der rob site gabs nen RPG tut, und da im ersten kapitel stand das drinne...). Gibt es eigentich irgendein Programm, das solche Maps erstellt, weil das von had zu machen ist sehr aufwändig
guck mal hier: http://www.blitzbase.de/_mapeditor/ Oder google einfach mal, es gibt haufenweise Map editoren im Netzt. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group