Einen richtigen Button machen?

Previous topic - Next topic

LukasOK

ich konnte eigentlich keinen Fehler feststellen.
Ich setzte mich mal dran vielleicht kann ich helfen ;)
Wenn jemand schneller ist bin für anderen Vorschläge offen  :booze:

LukasOK

Tut mir wirklich leid wollte ja eigentlich Montag morgen schon schreiben hatte aber kaum Zeit und jetzt ist schon Donnerstag... ;D

Auf jedenfalls ich habe aber schon versucht ein Lösung für dein Problem zu finden.

Also habe ich versucht aus deinem kleinen Schnipsel nachzubauen.

Von Dir:
"Sprites werde geladen", wollte ich jetzt nicht alles aufzählen.

SYSTEMPOINTER TRUE
GLOBAL PLAYER AS TYPEPLAYER
GLOBAL MAP AS TYPEMAP

GOSUB INIT
WHILE TRUE

GOSUB UPDATE

SHOWSCREEN

WEND

Versuch doch mal das in deinem Schnipsel einzusetzen
Beispiel:
"Sprites werde geladen", wollte ich jetzt nicht alles aufzählen.

SYSTEMPOINTER TRUE

GLOBAL color1,color2,button1,button2,button3
GLOBAL  mx,my,mb1,mb2
color1 = RGB(0x80, 0xff, 0xff)
color2 = RGB(0xff, 0xff, 0xb0)

GLOBAL PLAYER AS TYPEPLAYER
GLOBAL MAP AS TYPEMAP

GOSUB INIT
WHILE TRUE
button1 = FALSE
button2 = FALSE
button3 = FALSE
FOR i = 0 TO 2  // 3 x Mouse
                SETACTIVEMOUSE i
                        MOUSESTATE mx,my,mb1,mb2

                        IF (i = 0 AND mb1  AND  mx > 0 AND mx < 100 AND my > 0  AND my < 50) OR (i = 1 AND mb1  AND  mx > 0 AND mx < 100 AND my > 0  AND my < 50) OR (i = 2 AND mb1  AND  mx > 0 AND mx < 100 AND my > 0  AND my < 50)
                                button1 = TRUE
                        ENDIF
                        /////////////////////////////////////////
                        IF (i = 0 AND mb1  AND  mx > 0 AND mx < 100 AND my > 100  AND my < 150) OR (i = 1 AND mb1  AND  mx > 0 AND mx < 100 AND my > 100  AND my < 150) OR (i = 2 AND mb1  AND  mx > 0 AND mx < 100 AND my > 100  AND my < 150)
                                button2 = TRUE
                        ENDIF
                        /////////////////////////////////////////
                        IF (i = 0 AND mb1  AND  mx > 0 AND mx < 100 AND my > 200  AND my < 250) OR (i = 1 AND mb1  AND  mx > 0 AND mx < 100 AND my > 200  AND my < 250) OR (i = 2 AND mb1  AND  mx > 0 AND mx < 100 AND my > 200  AND my < 250)
                                button3 = TRUE
                        ENDIF
                        /////////////////////////////////////////

IF button1 = FALSE
        DRAWRECT 0,0,100,50,color1
        ELSE
        DRAWRECT 0,0,100,50,color2
ENDIF


IF button2 = FALSE
        DRAWRECT 0,100,100,50,color1
        ELSE
        DRAWRECT 0,100,100,50,color2
ENDIF

IF button3 = FALSE
        DRAWRECT 0,200,100,50,color1
        ELSE
        DRAWRECT 0,200,100,50,color2
ENDIF

NEXT

GOSUB UPDATE

SHOWSCREEN

WEND

Hat bei mir jetzt Funktioniert ich kenne jetzt aber auch nicht dein Projekt.
Versuch es mal wen es noch nicht geht sag bescheid.

sf-in-sf

Ich habe es wieder gefunden. Die Buttons hatte ich so gemacht: (Ausschnitt, hoffentlich komplet genug.)
Code (glbasic) Select
global k$ // catches messages from all knobs

TYPE screenknob
x%; y%; w%; h%; rtn$;
ENDTYPE
SUB setupknobs:
LOCAL foo AS screenknob

foo.w=scrx*0.08 ; foo.h=foo.w ; foo.rtn$="l"
foo.x=scrx*0.07-0.5*foo.w ; foo.y=scry*0.88
DIMPUSH kn[],foo


foo.w=scrx*0.08 ; foo.h=foo.w ; foo.rtn$="r"
foo.x=scrx*0.93-0.5*foo.w ; foo.y=scry*0.88
DIMPUSH kn[],foo


foo.w=scrx*0.08 ; foo.h=foo.w ; foo.rtn$="u"
foo.x=scrx*0.50 ; foo.y=scry*0.76
DIMPUSH kn[],foo


foo.w=scrx*0.08 ; foo.h=foo.w ; foo.rtn$="d"
foo.x=scrx*0.50 ; foo.y=scry*0.88
DIMPUSH kn[],foo
ENDSUB

SUB mousejob:
STATIC pressed%=FALSE, frame%=3,col%
k$=""
MOUSESTATE mx,my,b1,b2

FOREACH k IN kn[]
col=0x996644//bb8866//7744
DRAWRECT k.x,k.y,k.w,k.h,0x0
IF b1+b2>0
IF mx>=k.x AND mx<=k.x+k.w _
AND my>=k.y AND my<=k.y+k.h
k$=k.rtn$ ; col=0xffbb00//ffeecc//ffff99
ENDIF ; ENDIF
DRAWRECT k.x+frame,k.y+frame,k.w-frame-frame,k.h-frame-frame,col
//possibly PRINT k.label$ on top.
NEXT
endsub

// include this in the main loop:
// mixed use of screen buttons and arrow keys:
IF KEY(203) OR k$="l" THEN ; //please complete.
IF KEY(205) OR k$="r" THEN ;
IF KEY(200) OR k$="u" THEN ;
IF KEY(208) OR k$="d" THEN ;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Einschraenkung: wenn gleichzeitig 2+ Buttons gedrueckt werden, kann k$ nur 1 Wert tragen. Dieses Problem gibt es mit Pfeilen nicht. Viel Erfolg!
On the day the atom is a cube I will start believing in the square pixel.

Dennis

Bei dem letzten tauchen bei mir nur Fehler auf, als ich das versucht habe zu übernehmen.
Gibt es noch andere Möglichkeiten?
Sorry, das ich so lange nicht geantwortet hab.

sf-in-sf

entschuldigung, es fehlt "natuerlich"
Code (glbasic) Select
GLOBAL kn[] AS screenknob
Vor jedem SHOWSCREEN ruf mal "mouse job", und das ergebnis befindet sich in k$. benutze dann
Code (glbasic) Select
DEBUG " * " ; DEBUG k$ ;
um zu sehen, ob es funktioniert. -der debugger muss eingeschaltet sein.
Nur einmal am Anfang rufst du "setupknobs" mit GOSUB.
Wie ist es jetzt?
On the day the atom is a cube I will start believing in the square pixel.

Dennis

ok ich versuch es mal weiter.