GLBasic forum

Other languages => GLBasic - de => Topic started by: xverbatim on 2008-Nov-14

Title: eigene mousehit function return von variablen ?
Post by: xverbatim on 2008-Nov-14
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


Code (glbasic) Select
// --------------------------------- //
// 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


Title: Re: eigene mousehit function return von variablen ?
Post by: Kitty Hello on 2008-Nov-14
THEN führt _NUR_ den direkt danach folgenden Befehl aus.
Dein GOTO jump wird sofort ausgeführt
Title: Re: eigene mousehit function return von variablen ?
Post by: Schranz0r on 2008-Nov-14
Wär eh falsch ;)

kannste gleich einfach b1 abfragen :P
Title: Re: eigene mousehit function return von variablen ?
Post by: xverbatim on 2008-Nov-14
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

Title: Re: eigene mousehit function return von variablen ?
Post by: D2O on 2008-Nov-14
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

Code (glbasic) Select
// --------------------------------- //
// 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




Title: Re: eigene mousehit function return von variablen ?
Post by: xverbatim on 2008-Nov-14
@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
Title: Re: eigene mousehit function return von variablen ?
Post by: D2O 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:

Code (glbasic) Select
IF b1=1 THEN value=1; GOTO jump
IF b1=0 THEN value=0; GOTO jump


Ich persönlich meide GoTo wenns irgendwie geht.
Title: Re: eigene mousehit function return von variablen ?
Post by: xverbatim on 2008-Nov-14
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:

Code (glbasic) Select
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

Title: Re: eigene mousehit function return von variablen ?
Post by: D2O on 2008-Nov-14
Ä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.
Title: Re: eigene mousehit function return von variablen ?
Post by: S.O.P.M. on 2008-Nov-14
Und warum nicht lieber so?
Code (glbasic) Select
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.
Title: Re: eigene mousehit function return von variablen ?
Post by: xverbatim on 2008-Nov-14
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

Title: Re: eigene mousehit function return von variablen ?
Post by: BumbleBee on 2008-Nov-14
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
Title: Re: eigene mousehit function return von variablen ?
Post by: Schranz0r on 2008-Nov-15
Jo, ich z.B benutze nie GOTO ;)
Vorher würde ich mir nen Knoten in den Finger machen  :whistle: