Funktion mehrfach nutzen?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Fobsi

Betreff: Funktion mehrfach nutzen?

BeitragDi, März 24, 2009 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hi @ll

hab da mal bisschen gespielt mit nem rpg beispiel und dabei etwas entdeckt worüber ich forher noch nicht bescheid gewusst habe. Man kann eine Funktion nur 1mal in einer Schleife nutzen?
z.b:
die Folgende Funktion:(kolision)
Code: [AUSKLAPPEN]
Function koli(plxx,plyy,mapmm,linksa,rechtsa,hocha,runtera)
 If playerx = plxx And playery = plyy And mapm = mapmm Then
   le = linksa
   ue = hocha
   re = rechtsa
   de = runtera
    Else
   ue = 1
   le = 1
   de = 1
   re = 1
 EndIf
End Function


mapm = map ID

hoffe der Code erklärt sich vonselbst.

naja wenn ich nun z.b:

Code: [AUSKLAPPEN]
koli(1,1,1,0,1,0,1)
koli(2,1,1,1,1,0,1)


code wird nur koli(2,1,1,1,1,0,1) ausgeführt und koli(1,1,1,0,1,0,1) wird überschrieben. wie löse ich das problem das jede Funktion einzeln ausgeführt wird?

lg Fobsi

NightPhoenix

BeitragDi, März 24, 2009 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bist du dir sicher, dass du nicht irgendwo im Code oder beim Aufrufen der Function einen Fehler hast?
Functions kann man nämlich beliebig oft aufrufen!
Ich empfehle dir da nochmal drüber zu schaun.

Fobsi

BeitragDi, März 24, 2009 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
100% ich habe es getestet und leider wird immernur die funktion die ich als letztes schreibe auch wirklich ausgeführt Crying or Very sad

im Beispiel:
Code: [AUSKLAPPEN]
koli(1,1,1,0,1,0,1)
koli(2,1,1,1,1,0,1)


wird ausgeführt und
koli(2,1,1,1,1,0,1)

bezweckt einen effekt. nähmlich das der spieler nicht nach oben gehen kann auf dem xfeld 2 und yfeld 1.

habe wohl iw n fehler Sad naja würde ich den code zeigen würde es nur so hageln von beschwerden ^^

lg Fobsi

NightPhoenix

BeitragDi, März 24, 2009 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach was, wenn wir dir helfen sollen kannst du uns den Code ruhig zeigen.
Muss ja nicht alles sein, die entsprechende Passage würde reichen.

Fobsi

BeitragDi, März 24, 2009 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
nagut das hier ist der code:

Code: [AUSKLAPPEN]
Repeat
   WaitTimer(Timer)
   Cls
   
   Select menustate
      Case 1
            PB_DisableAll()
            If le = 1 Then
            PB_EnableButton(Btn_left)
            EndIf
            If ue = 1 Then
            PB_EnableButton(Btn_up)
            EndIf
            If re = 1 Then
            PB_EnableButton(Btn_right)
            EndIf
            If de = 1 Then
            PB_EnableButton(Btn_down)
            EndIf
            
            DrawImage map1_1, rpx,rpy
            DrawImage MainImage, 0, 0
            DrawImage att,272,513,wid
            DrawImage player,275,245,playerid
            
            If dbm = 1 Then
            Text 20,20,"X"+MouseX()
            Text 20,35,"Y"+MouseY()
            Text 20,45,"XP:"+playerx
            Text 20,55,"YP:"+playery
            Text 20,65,"rpx:"+rpx
            Text 20,75,"rpy:"+rpy
            Text 20,85,"mapm:"+mapm
            EndIf
            ;----
            ;rechts = rpx + 32
            ;links =  rpx - 32
            ;hoch  =  rpy - 32
            ;runter = rpy + 32
            ;---
            
            ;Function ein(mapid,mx,my,zmapid,zmapname$,mrpx,mrpy,plx,ply)
            
            
            ein(1,4,4,2,maphaus,84,83,6,5)
            aus(2,6,6,1,map1_2,148,83,4,5)
            
            ein(1,8,4,3,maphaus,84,83,6,5)
            aus(3,6,6,1,map1_2,20,83,8,5)
            
            koli(1,1,1,0,1,0,1)
            koli(2,1,1,1,1,0,1)

            sprechen(1,12,6,"Herzlich Willkommen!","Ich bin Mr. Grintor","beim mir kannst du","Quests anehmen/beenden")
            
            If PB_ButtonHit(Btn_up) Then  playery = playery - 1 rpy = rpy + 32
            If PB_ButtonHit(Btn_left) Then playerx = playerx - 1 rpx = rpx +32
            If PB_ButtonHit(Btn_right) Then playerx = playerx + 1 rpx = rpx -32
            If PB_ButtonHit(Btn_down) Then playery = playery + 1 rpy = rpy -32


Funktionen Include:


Alles geht zu 100%
Code: [AUSKLAPPEN]
Function ein(mapid,mx,my,zmapid,zmapname$,mrpx,mrpy,plx,ply)
If mapm = mapid And playerx = mx And playery = my Then
mapm = zmapid
map1_1 = zmapname$
rpx = mrpx
rpy = mrpy
playerx = plx
playery = ply
EndIf
End Function

;mapid = zmapid von ein()
Function aus(mapid2,mx2,my2,zmapid2,zmapname2$,mrpx2,mrpy2,plx2,ply2)
If mapm = mapid2 And playerx = 6 And playery= 6 Then
mapm = zmapid2
map1_1 = zmapname2$
rpx = mrpx2
rpy = mrpy2
playerx = plx2
playery = ply2
EndIf
End Function
Function koli(plx8,ply8)

plx7 = plx8
ply7 = ply8
plx5 = plx8 +1
ply5 = ply8 +1
plx6 = plx8 -1
ply6 = ply8 -1
 
If playerx = plx5 And playery = ply7 Then
le = 0
Else
le = 1
EndIf 
If playerx = plx6 And playery = ply7 Then
re = 0
Else
re = 1
EndIf 
If playerx = plx7 And playery = ply6 Then
de = 0
Else
de = 1
EndIf 
If playerx = plx7 And playery = ply5 Then
ue = 0
Else
ue = 1
EndIf
End Function


Erklärung:
Funktion ein() = Eingang auf der Hauptmap.
Funktion aus() = Ausgang Aus der Instanz (z.b aus einem Haus.)
Funktion koli() = damit man da nicht durchkommt Rolling Eyes

naja mein erstes richtiges spiel indem man auch herumlaufen kann(unendliche map möglich 99999999x123123123 z.b)

Edit:

hab das spiel mal compiliert: Man kann durch die türen des linken oberen hauses gehen und mit dem roten magier am See reden.
https://www.blitzforum.de/upload/file.php?id=5123

lg Fobsi

PSY

Betreff: Re: Funktion mehrfach nutzen?

BeitragMi, März 25, 2009 7:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function koli(plxx,plyy,mapmm,linksa,rechtsa,hocha,runtera)
 If playerx = plxx And playery = plyy And mapm = mapmm Then
   le = linksa
   ue = hocha
   re = rechtsa
   de = runtera
    Else
   ue = 1
   le = 1
   de = 1
   re = 1
 EndIf
End Function



Hm. Du fragst in der Funktion ab
If playerx = plxx And playery = plyy ...

Wenn Du jetzt die Funktion aufrufst mit 1,1,1,0,1,0,1
wird überprüft, ob playerx = 1 ist und playery = 1

Danach rufst Du sofort erneut die Funktion mit 2,1,1,1,1,0,1 auf.
Es wird überprüft, ob playerx=2 und playery=1 ist.

Wenn also bei einem Aufruf was passiert, ist folglich bei einer Parameterübergabe die IF-Abfrage WAHR und bei der zweiten FALSCH....es können ja nicht beide korrekt sein. Bei einem Aufruf wird also der IF-Teil ausgeführt und bei dem andern der ELSE-Teil.

Ich glaub, Du hast da nen Denkfehler drin Very Happy Überschrieben wird da nix...

L8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

Fobsi

BeitragMi, März 25, 2009 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
also muss ich die else abfrage irgendwie umgehen... mhh wenn ich es ohne else mache wird wie in dem Folgenden Beispiel:
user posted image
also muss ich den Effekt eingrzenzen... mhh gut werde mal überlegen

lg Fobsi

Edit:

Problem gelöst:
Code: [AUSKLAPPEN]
koli(1,1,1,0,1,0,1)
koli(1,2,1,1,1,0,1)


Function:
Code: [AUSKLAPPEN]
Function koli(mapmode,playeryy,playerxx,hochss,runterss,linkss,rechtss)

If mapm = mapmode And playery = playeryy And playerx = playerxx Then

le = linkss
ue = hochss 
re = rechtss
de = runterss
EndIf             
End Function


Natürlich müssen bevor die Funktion in der Hauptschleife kommt wieder alle bottons aktiviert werden.

Beispiel:


Code: [AUSKLAPPEN]

le = 1
de = 1
re = 1
ue = 1

koli(1,1 ,1 ,0,1,0,1)
koli(1,2 ,1 ,1,1,0,1)
koli(1,3 ,1 ,1,1,0,1)
koli(1,4 ,1 ,1,1,0,1)
koli(1,5 ,1 ,1,1,0,1)
koli(1,6 ,1 ,1,1,0,1)
koli(1,7 ,1 ,1,1,0,1)
koli(1,8 ,1 ,1,1,0,1)
koli(1,9 ,1 ,1,1,0,1)
koli(1,10,1 ,1,0,0,1)


Effekt:

__
{P
{P
{P
{P
{P
{P

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group