Geh-Funktion funktioniert nicht

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

gigi

Betreff: Geh-Funktion funktioniert nicht

BeitragMi, Aug 29, 2007 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Aug 29, 2007 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Aug 29, 2007 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 30, 2007 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 31, 2007 23:42
Antworten mit Zitat
Benutzer-Profile anzeigen
das check ich irgendwie nicht, das was du meinst...
Ich hab jetzt noch eine Fast komplett neue Funktion die nätürlich nicht klappt!!! Evil or Very Mad
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 Shocked
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?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Sep 01, 2007 8:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 01, 2007 8:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 01, 2007 8:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@Ralklimen:Wie Meinen? Es funktioniert doch auch mit meinem Code!!! Oder meinst du in der Funktion?

@Dreiser:Das habe ich gemacht.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Sep 01, 2007 9:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code ist der gleiche, das war nur eine Anregung zur Speedoptimierung weiles so erheblich schneller ist.
[BB2D | BB3D | BB+]
 

gigi

BeitragDo, Sep 06, 2007 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group