Seite 2 von 5
Verfasst: 06.06.2007 20:31
von RSBasic
@D@nte
Ist aber sehr schlecht in einer Wiederholschleife: xyz = abc()
PS: Spiel (Hauptschleife) + Prozedure
\\Edit:
...xyz = abc()
Denn, dann kann man den Wert von X nicht menr ändern, weils sowieso in 101 geändert wird.
Verfasst: 06.06.2007 20:36
von Andreas_S
Wie wärs mit Global x?
Verfasst: 06.06.2007 20:40
von a14xerus
RSBasic wollte einen wert in einer procedure ändern und in der main wieder weiter benutzen
Sollte die Procedure mehrere Werte veränder sollte man Pointer übergeben und die Procedure ändert die Werte direkt im Speicher
Soll nur ein Wert geändert werden ist es doch ganz einfach:
Code: Alles auswählen
Procedure.l erhoehe(wert.l)
wert+1
ProcedureReturn wert
Endprocedure
x = 5
debug x
x = erhoehe(x)
debug x
; oder auch:
debug "---"
x = 5
for i = 1 to 5
x = erhoehe(x)
debug x
next
Verfasst: 06.06.2007 20:42
von PureBasic4.0
Verfasst: 06.06.2007 20:46
von Andreas_S
Und so?
Code: Alles auswählen
Procedure Add1ToVal(*Val.Long)
*Val\l+1
EndProcedure
a=0
Debug a
Add1ToVal(@a)
Debug a
Verfasst: 06.06.2007 20:49
von a14xerus
Das ist die von mir erwähnte Pointervariante
Nur nützlich, wenn mehrere Werte geändert werden sollen.
Oder andersherum, wenn du zb einem Thread mehrere Werte übergeben willst (strukture)
Immer wenn du mehrer Werte irgendwohin übergeben willst aber nur ein Wert "zugelassen" ist, ist das Arbeiten mit Pointern zu structuren am besten (IMHO)
Verfasst: 06.06.2007 20:49
von RSBasic
@a14xerus
Danke für dein Code, das war sehr hilfreich
Also das Problem besteht immernoch
Code: Alles auswählen
...
x = 5
Debug x
x = erhoehe(x)
Debug x
; oder auch:
...
Also vor der Prozedure und nach "---" ist mir klar.
Aber ich weis nicht wo ich es hin machen soll, diesen Teil-Code, was ich siehe oben gepostet hab.
Weil ich muss in der Wiederholschleife hinschreiben, aber dann macht es keinen Sinn.

Verfasst: 06.06.2007 20:53
von PureBasic4.0
Warum machst du es nicht einfach so?:
Code: Alles auswählen
Global x.l
Procedure ErhoeheX()
x + 1
EndProcedure
x = 5
Debug x
ErhoeheX()
Debug x
Verfasst: 06.06.2007 20:54
von a14xerus
weil das unschön ist
Verfasst: 06.06.2007 20:54
von ts-soft
Wenn Du in einer Procedure bist, wird nur der dortige Code ausgeführt, bis
ProcedureReturn folgt oder die Procedure zu ende ist. Die andere Schleife
wartet solange

. Mit Threads kann man das umgehen, aber dann
kannste auch nicht gleichzeitig auf dieselben variablen zugreifen, sondern
mußt die sperren. Also irgendo haste einen grossen Denkfehler.