Geh-Funktion funktioniert nicht
Übersicht

gigiBetreff: Geh-Funktion funktioniert nicht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier erst einmal der Code:Code: [AUSKLAPPEN] Function Gehen(trupp,truppx,truppy,punktx,punkty,fliegend,geschwindigkeit)
If fliegend=1 And truppx<=punktx Then truppx=truppx+geschwindigkeit EndIf If fliegen=1 And truppy<=punkty Then truppy=truppy+geschwindigkeit EndIf End Function Weiter unten in der Hauptschleife steht dann das:Code: [AUSKLAPPEN] If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) Then
Gehen(fusstrupp,fuss1x,fuss1y,MouseX(),MouseY(),1,2) EndIf Die Variablen erklären sich eigentlich von selbst. Das Problem: Die Figur bewegt sich kein Stückchen... Weiß jemand warum? MFG Gigi |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du den Code aus deinem Code kopiert, oder kommt der Fehler, dass du bei der zweiten Abfrage "fliegen" und nicht "fliegend" prüfst, vom abschreiben?
btw: Wozu ist der Parameter "trupp"? Kommt das später noch? EDIT: Bin ich dumm... Du hast noch nen größerern Fehler. Was passiert, wenn truppx>punktx? Da musst du noch ne Abfrage machen! Ebenso für y |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Trupp steht für die Einheit die bewegt werden soll.Der Parameter wird später vielleicht noch bei nicht fliegenden Einheiten verwendet. Das mit > hab ich gemacht. Verbessert hab ich auch. So sieht die Funktion jetzt aus.Code: [AUSKLAPPEN] Function Gehen(trupp,truppx,truppy,punktx,punkty,fliegend,geschwindigkeit)
If fliegend=1 And truppx<=punktx Then truppx=truppx-kartex-geschwindigkeit EndIf If fliegend=1 And truppy<=punkty Then truppy=truppy-kartex-geschwindigkeit EndIf If fliegend=1 And truppx>=punktx Then truppx=truppx+kartey+geschwindigkeit EndIf If fliegend=1 And truppy>=punkty Then truppy=truppy+kartey+geschwindigkeit EndIf End Function Die Abfrage in der Hauptschleife ist aber dieselbe. |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
sind deine variablen global oder wie soll sich deine truppx auf fuss1x übertragen.
das geht soweit ich weis nur mit banks oder types irgenwie so: Code: [AUSKLAPPEN] ;ganz am anfang erstellen wir ein typ ding
global t.typ=new typ ... .. . code . .. ... t\erstevariable=bla t\zweitevariable=blo function_die_variablen_verändern_soll(t.typ) bla=t\erstevariable blo=t\zweitevariable mit banks ist das ähnlich nur eben mit peek und poke |
||
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das check ich irgendwie nicht, das was du meinst...
Ich hab jetzt noch eine Fast komplett neue Funktion die nätürlich nicht klappt!!! ![]() hier:Code: [AUSKLAPPEN] Function Bewegen(kx,ky,ma,kartee,ax,ay,g)
If MouseDown(1) And ImagesCollide(ma,MouseX(),MouseY(),0,kartee,ax,ay,0) And kx+kartey<MouseX() Then kx=kx+g EndIf If MouseDown(1) And ImagesCollide(ma,MouseX(),MouseY(),0,kartee,ax,ay,0) And kx+kartey>MouseX() Then kx=kx-g EndIf If MouseDown(1) And ImagesCollide(ma,MouseX(),MouseY(),0,kartee,ax,ay,0) And ky+kartey<MouseY() Then ky=ky+g EndIf If MouseDown(1) And ImagesCollide(ma,MouseX(),MouseY(),0,kartee,ax,ay,0) And ky+kartey>MouseY() Then ky=ky-g EndIf End Function Die ganzen variablen stehen für: ma=maus kartee=karte ![]() ax+ay= kartenposition g=geschwindigkeit Aber wiegesagt,es funzt mal wieder nicht... Man kann aber die gleichen Zeile nicht als Funktion sondern als normalen Text in die Hauptschleife einfügen,ungefähr so: Code: [AUSKLAPPEN] If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1x+kartey<MouseX() Then
fuss1x=fuss1x+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1x+kartey>MouseX() Then fuss1x=fuss1x-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1y+kartey<MouseY() Then fuss1y=fuss1y+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1y+kartey>MouseY() Then fuss1y=fuss1y-1 EndIf Und so würde es auch funzen, aber das ist mir deutlich zu umständlich, den ich müsste es ja für jede vom Spieler zu bewegender Einheit so machen... Würde das eigentlich Rechenpower ziehen? |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
So wie die Zeilen aufgebaut sind werden alle Befehle immer abgearbeitet egal ob Mousedown() true ist oder nicht. das hängt mit and zusammen.
Besser ist es Code: [AUSKLAPPEN] If MouseDown (1) Then
If fuss1x + kartey < MouseX () Then If ImagesCollide (maus,MouseX () ,MouseY () ,0,karte,kartex,kartey,0) Then fuss1x = fuss1x + 1 EndIf EndIf If fuss1x + kartey > MouseX () Then If ImagesCollide (maus,MouseX () ,MouseY () ,0,karte,kartex,kartey,0) Then fuss1x = fuss1x - 1 EndIf EndIf If fuss1y + kartey < MouseY () Then If ImagesCollide (maus,MouseX () ,MouseY () ,0,karte,kartex,kartey,0) Then fuss1y = fuss1y + 1 EndIf EndIf If fuss1y + kartey > MouseY () Then If ImagesCollide (maus,MouseX () ,MouseY () ,0,karte,kartex,kartey,0) Then fuss1y = fuss1y - 1 EndIf EndIf EndIf |
||
[BB2D | BB3D | BB+]
|
![]() |
Dreiser |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist die Variable "kartey" Global?
Wenn sie nicht Global deklariert ist, musst Du sie der Funktion mitgeben. Würdest Du IDEal benutzen, wäre "kartey" rot markiert, und Du würdest den Fehler schneller finden. (Sofern Du natürlich alle Variablen deklarierst hast, aber das gehört eigentlich zu einem guten/übersichtlichen Programmierstil.) |
||
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Ralklimen:Wie Meinen? Es funktioniert doch auch mit meinem Code!!! Oder meinst du in der Funktion?
@Dreiser:Das habe ich gemacht. |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code ist der gleiche, das war nur eine Anregung zur Speedoptimierung weiles so erheblich schneller ist. | ||
[BB2D | BB3D | BB+]
|
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BIGGEST EDIT EVER
Nun hab ich das erste Problem beseitigt, aber: Man kann jetzt die Einheiten auswählen, Deren Lebenspunkte werden angezeigt und der Heli kollidiert mit niemandem. Die EINHEITEN bewegen geht auch, aber komischerweise werden trotz des Codes, den ich gleich zeige, alle Einheiten auf einmal bewegt. Hier der Code:Code: [AUSKLAPPEN] If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And panzer1x<mausx And nowlife=panzer1l Then
panzer1x=panzer1x+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And panzer1x>mausx Then panzer1x=panzer1x-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And panzer1y<mausy Then panzer1y=panzer1y+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And panzer1y>mausy Then panzer1y=panzer1y-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And jeep1x<mausx And nowlife=jeep1l Then panzer1x=panzer1x+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And jeep1x>mausx Then jeep1x=jeep1x-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And jeep1y<mausy Then jeep1y=jeep1y+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And jeep1y>mausy Then jeep1y=jeep1y-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And heli1x<mausx And nowlife=heli1l Then heli1x=heli1x+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And heli1x>mausx Then heli1x=heli1x-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And heli1y<mausy Then heli1y=heli1y+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And heli1y>mausy Then heli1y=heli1y-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1x<mausx And nowlife=fuss1l Then fuss1x=fuss1x+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1x>mausx Then fuss1x=fuss1x-1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1y<mausy Then fuss1y=fuss1y+1 EndIf If MouseDown(1) And ImagesCollide(maus,MouseX(),MouseY(),0,karte,kartex,kartey,0) And fuss1y>mausy Then fuss1y=fuss1y-1 EndIf Kennt jemand die Erklärung warum das SO funzt? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group