Problem mit Rückgabe bei Function

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Darthshoot

Betreff: Problem mit Rückgabe bei Function

BeitragDo, Dez 28, 2006 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 28, 2006 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 28, 2006 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 28, 2006 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Also Danke erstmal für die Antworten. Was meinst du mit Frame markieren?

Wie geht denn das mit den Globals?

Eingeproggt

BeitragDo, Dez 28, 2006 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Genauer lesen!
Ich meine MASKIEREN!
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Dreamora

BeitragDo, Dez 28, 2006 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 28, 2006 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Razz also net MySQL aber so in der Funktionsweise... nagut ok vielen Dank. Wenns Probleme gibt schreib ich einfach nochmal.

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! Very Happy mit global hats gefunzt ! Danke Leute!
 

Dreamora

BeitragDo, Dez 28, 2006 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 28, 2006 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group