hallo,
ich habe eine frage, kann mir jemand sagen, warum ich die variable value nicht zurückbekomme ?
der code dient nur testzwecken, möchte eine einfach mousehit function schreiben.
gruß tom
p.s. danke im vorfeld
// --------------------------------- //
// Project: mousehit
// Start: Friday, November 14, 2008
// IDE Version: 6.058
WHILE KEY(57)=FALSE
zustand=mousehit()
PRINT zustand,100,100
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// --- MOUSEHIT ---
// ------------------------------------------------------------- //
FUNCTION mousehit:
// Diese Variablen sind als LOCAL definiert:
// value
MOUSESTATE mx,my,b1,b2
IF b1=0 THEN value=0; GOTO jump
IF b1=1 THEN value=1; GOTO jump
jump:
RETURN value
ENDFUNCTION // MOUSEHIT
THEN führt _NUR_ den direkt danach folgenden Befehl aus.
Dein GOTO jump wird sofort ausgeführt
Wär eh falsch ;)
kannste gleich einfach b1 abfragen :P
Quote from: Schranz0r on 2008-Nov-14
Wär eh falsch ;)
kannste gleich einfach b1 abfragen :P
@Schranz0r
ja, ist schon klar ...
mir gings jetzt nur um die übergabe
@Kitty Hello
???
irgendwie ist mir das noch schleierhaft; wieso wird nach "then" die variable nicht geändert und NUR der danach folgende Befehl ausgeführt ?
ich dachte, das semikolon steht dafür, das mehrere befehle in einer zeile sind ?
if x=1 then var=2789;var2=9;showscreen;goto irgendwas
wäre nett, wenn Du mich aufklärst ;-)
Gruß Tom
Hi, Gernot hat ja für uns schon mal eine KeyHit() function geschrieben.
Die kann man selber dann etwas umschreiben für ein MouseHit().
Hier mal die Functionen und ein beispiel dazu für die linke und rechte Mousetaste
// --------------------------------- //
// Project: Mousehit
// Start: Saturday, June 21, 2008
// IDE Version: 5.300
GLOBAL f1 = 200
GLOBAL f2 = 0
GLOBAL f3 = 50
GLOBAL f4 = 50
GLOBAL f5 = 50
GLOBAL f6 = 3
WHILE TRUE
MOUSESTATE mx,my,b1,b2 ///Mouse Initialisieren
MouseHitUpdate(b1,b2) // Abfrage welche Mousetasten überprüft werden sollen
// Mousbutton 1
IF MouseHit(1) = 1 // (1) = b1 | (2) = b2
// Returns >> 1 = MouseHit | 2 = MouseDown | -1 = release event | 0 = Nothing
f1 = RND(255)
f2 = RND(255)
f3 = RND(255)
ENDIF
// Mousbutton 2
IF MouseHit(2) = 1
f4 = RND(255)
f5 = RND(255)
f6 = RND(255)
ENDIF
DRAWRECT 10,10,100,100,RGB(f1,f2,f3)
DRAWRECT 115,10,100,100,RGB(f4,f5,f6)
SHOWSCREEN
WEND
END
//////////////////////////////////////////////////////////////////////////////////////////////////////
FUNCTION MouseHitUpdate : l_1 = 0, l_2 = 0
GLOBAL gMouseDown[], gMouseState[]
GLOBAL K[]
DIM K[3]
LOCAL i
// First Time call/ zum ersten Mal hier
IF BOUNDS(gMouseDown[],0)=0
DIM gMouseDown[7]
DIM gMouseState[7]
ENDIF
// For each key / für jede Taste
FOR i=0 TO 2
// k = KEY(i) ////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
K[0] = 0 //Dummy, für das bessere verständnis ;) Button 1 - 2
K[1] = l_1
K[2] = l_2
// Key is pressed / Taste ist gedrückt
IF K[i]
IF gMouseDown[i]
gMouseState[i]=2 // war 1
ELSE
gMouseDown[i]=2 // war 1
gMouseState[i]=1 // war 2
ENDIF
ELSE
// Key is not pressed / Taste nicht gedrückt
// Has key been pressed before?
// War die Taste gedrückt?
IF gMouseDown[i]
gMouseDown[i] = 0
gMouseState[i] = -1
ELSE
gMouseState[i]=0
ENDIF
ENDIF
NEXT
ENDFUNCTION
// 0 = not pressed / nicht gedrückt
// 1 = just pressed / gerade runtergedrückt
// 2 = pressed / gedrückt (gehalten)
// -1 = release event / wieder losgelassen
// Liefert den aktuellen zustand zurück, Max 6 Mousbuttons 1-6
FUNCTION MouseHit : mKEY
// SIcherheits abfrage
IF mKEY > 2 THEN mKEY = 0
IF mKEY < 0 THEN mKEY = 0
RETURN gMouseState[mKEY]
ENDFUNCTION
@D²O
Danke für die Mühe, aber es geht mir jetzt um die Frage, warum die Variable nach "then" nicht gesetzt werden kann und "Goto" gleich ausgeführt wird...
ist mir ehrlich gesagt sehr schleierhaft, ich dachte "if x=1 then x1=2;y2=32; goto irgendwas" ist kein problem, irgendwie verstehe ich das momentan nicht wirklich !
gruß
tom
Ganz einfach, Du kommst nie zur möglichkeit das Value 1 ist auch wenn Du die Mouse drückst.
Warum? ;)
Das goto jump wird immer vor der If abfage ob die taste gedrückt ist aus geführt und Du Überspringst damit
die If abfrage.
Ist das so Verständlich??
Mach mal das hier:
IF b1=1 THEN value=1; GOTO jump
IF b1=0 THEN value=0; GOTO jump
Ich persönlich meide GoTo wenns irgendwie geht.
Quote from: D²O on 2008-Nov-14
Ganz einfach, Du kommst nie zur möglichkeit das Value 1 ist auch wenn Du die Mouse drückst.
Warum? ;)
Das goto jump wird immer vor der If abfage ob die taste gedrückt ist aus geführt und Du Überspringst damit
die If abfrage.
Ist das so Verständlich??
Mach mal das hier:
IF b1=1 THEN value=1; GOTO jump
IF b1=0 THEN value=0; GOTO jump
Ich persönlich meide GoTo wenns irgendwie geht.
goto vor der if abfrage ?
ups, das ist aber gewöhnungsbedürftig...oder ?
nun gut, jedenfalls danke für den hinweis...
gruß tom
Ähmm nö,
so wie Du es geschrieben hast, wird das erste goto immer vor der zweiten If abfrage gestartet,
somit kann es nie zur der zweiten If abfrage kommen.
Und warum nicht lieber so?
IF b1 = 1
value = 1
ELSE
value = 0
ENDIF
GOTO jump
Hierbei finden die nötigen Abfragen in jedem Fall immer vor dem GOTO statt.
ich glaube, ich habe mein verständnisproblem erkannt ;-)
ich bin generell davon ausgegangen, das bei der if abfrage wenn die bedingung erfüllt ist oder nicht, der code weiter in der zeile bearbeitet/ausgeführt wird...
also diese zeile
IF b1=1 THEN PRINT "wieso ist value =-11 habe doch maustaste noch nicht gedrückt ? ",5,5;value=-11;GOTO jump
wird so nicht ausgeführt (also nicht wenn b1=1 gebe text aus und setze value=-1 und springe dann zu jump SO NICHT)
sondern obige zeile wird intern wohl so ausgeführt
if b1=1 then PRINT "wieso ist value =-11 habe doch maustaste noch nicht gedrückt ? ",5,5
value=-11
GOTO jump
DA KANN ICK JA HIER SCHREIBEN WAT ICK WILL -PASSIERT JA NISCHT ;-))))
jump:
Habe ich das JETZT richtig erkannt ?
@S.O.P.M.
ich wollte das nur wegen der übersichtlichkeit haben, ich habe sooooooooooooooo viele if abfragen, da geht mir ehrlich gesagt die übersicht verloren...
Gruß
Tom
Bei vielen Verzweigungen wäre SELECT CASE auch noch zu empfehlen. :) Und nimm nicht so viele GOTO's. Am Besten gar keine. :) Das ist BASIC-Steinzeit und schrecklicher Programmierstil. :P
Cheers
Jo, ich z.B benutze nie GOTO ;)
Vorher würde ich mir nen Knoten in den Finger machen :whistle: