Problem mit Rückgabe bei Function
Übersicht

DarthshootBetreff: Problem mit Rückgabe bei Function |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Ich habe mir für mein neues Game mehr Ordnung gewünscht. Deshalb arbeite ich jetzt mit externen Dateien und Functionen. Also FFTI ist die Anwendung, die man später startet. Sie läd Player.bb - diese enthält lediglich eine Function, die dafür zuständig ist den Player zu rendern und ihn zu bewegen. Die Function nimmt sich ihre Startwerte aus FFTI und dort ist das Problem. Denn eigendlich sollten die neuen Startwerde (XPlayer und YPlayer) mit Return "upgedated" zurückgeliefert werden und von dort an sollte FFTI die neuen Werte als Startwerte wieder zur Function schicken. Also nach jeder Bufferschleife halt... FFTI: Code: [AUSKLAPPEN] ; Initialisiere FFTI - Fight for the Imperials
Graphics 800, 600 AppTitle = "FIGHT FOR THE IMPERIALS" SetBuffer BackBuffer() ; Lade Spieler Include "Player.bb" ; Initialisiere Spielerdaten PlayerImage = LoadImage("Player.bmp") XPlayer = 100 YPlayer = 300 ; Initialisiere Bufferschleife Repeat Cls ; Aufruf der Function Player Player(PlayerImage, XPlayer, YPlayer) Flip Until KeyHit(1) End Player.bb: Code: [AUSKLAPPEN] ; Spieler
Function Player(PlayerImage, XPlayer, YPlayer) ; Berechne Spieler If KeyHit(203) Then XPlayer = XPlayer - 3 If KeyHit(205) Then XPlayer = XPlayer + 3 If KeyHit(200) Then YPlayer = YPlayer - 3 If KeyHit(208) Then YPlayer = YPlayer + 3 ; Render Spieler MaskImage PlayerImage, 255, 0, 255 DrawImage PlayerImage, XPlayer, YPlayer Return XPlayer Return YPlayer End Function Was habe ich falsch gemacht? Ah ehm mein Problem ist, dass die Werte in FFTI nicht upgedated werden. Man kann den Player zwar bewegen, aber nach einem Frame wird er wieder zu 100, 300 geschickt. Danke im Voraus. MfG Darthshoot |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit return kann man lediglich einen Wert zurück geben und diesen muss man dann auch entgegen nehmen also PlayerX=Player(). Wenn man mehrere Were zurückgeben will muss man entweder mit Globals, Types oder einem Stack ( *werbung mach* einen von mir findest du im Codearchiv ) arbeiten.
MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin auch kein großer Experte, was Gültigkeitsbereiche von Variablen angeht, aber 2 Dinge sind mir aufgefallen:
1.) Du gibst mit deiner Funktion 2 Werte hintereinander zurück...Das geht nicht, nach "Return XPlayer" ist die Funktion zu Ende. Ausserdem wird der zurückgegebene Wert nirgens gspeichert (im FFTI-Code) 2.) Eher unwichtig: Warum maskierst du das Image bei jedem Frame neu? Einmal gleich nach dem Laden würde doch genügen! Edit: Sry, 5k41 war wohl schneller als ich |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also Danke erstmal für die Antworten. Was meinst du mit Frame markieren?
Wie geht denn das mit den Globals? |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genauer lesen!
Ich meine MASKIEREN! |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Globale Variablen sind überall im Programm gültig. Wenn du 2 Werte zurück geben musst kannst du sonst auch Types zurück geben.
Das wird alles schön in der Hilfe erklärt, einfach in der IDE auf F1 drücken und nachlesen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem ist, dass ich Types noch nicht hatte.. hmm ich muss es mir wohl mal anschauen. Soweit ich weiß ist es ne Art MySQL Datenbank ![]() P.S. Ich maskiere doch garnichts oO P.S. 2: Wie sollen mir denn globale Variablen helfen? Es geht ja gerade darum, dass ich diese XPlayer und YPlayer umändern will. ACHSO also werden die umgeändert.. ehm ich schreib gleich nochma ICh habs! ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Type hat nichts mit MySQL zu tun. Type ist das gleiche wie Struct in C. einfach ein Speicherblock wo du für die verschiebenen Bereiche einen Type und Namen hast, also net mit Byte Offesets reinhacken musst. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
darthshoot hat Folgendes geschrieben: P.S. Ich maskiere doch garnichts oO
Doch, du maskierst! Code: [AUSKLAPPEN] ; Spieler
Function Player(PlayerImage, XPlayer, YPlayer) ; Berechne Spieler If KeyHit(203) Then XPlayer = XPlayer - 3 If KeyHit(205) Then XPlayer = XPlayer + 3 If KeyHit(200) Then YPlayer = YPlayer - 3 If KeyHit(208) Then YPlayer = YPlayer + 3 ; Render Spieler MaskImage PlayerImage, 255, 0, 255 ;<--------- Da maskierst du! DrawImage PlayerImage, XPlayer, YPlayer Return XPlayer Return YPlayer End Function Da diese Funktion in jeder Schleife ausgeführt wird, maskierst du dein Image auch in jeder Schleife. Das ist nicht nötig und kostet nur Rechenzeit. Maskiere das Image nach dem laden und der Keks ist gegessen. cheers |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group