Kollisionsabfrage funktioniert bei erstem Spiel in GlBasic nicht.

Previous topic - Next topic

Metamorphose

der link zu mousehit geht nicht mehr, hat jemand noch die funktion? hab sie selbst leider nicht abgespeichert
lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

D2O

Moin moin,

die alte Funktion habe ich nicht mehr, aber ich hatte sie mal geändert ;)

Hier die Funktion, der Type und ein kleines beispiel dazu.
Linke mousetate zählt nach oben, recht zurück.

Code (glbasic) Select

count% = 33

WHILE TRUE

MOUSESTATE mx%,my%,a%,b%

//Mousevariable, mousbutton
IF MouseHit(a,1) = 1 THEN INC count%,1
IF MouseHit(b,2) = 1 THEN DEC count%,1

IF count% < 33 THEN count% = 86
IF count > 86 THEN count% = 33


PRINT CHR$(count%) , 100,100
SHOWSCREEN

WEND
END






// bt% =  Mousebutton,
// l_mbutton = standart linke mousetaste
// es können gesammt 7 Tasten abgefragt werden
// l_mbutton = 0 sollte aber reserviert bleiben
FUNCTION MouseHit% : bt%, l_mbutton% = 1



STATIC s_k AS T_mousehit


IF bt = TRUE  AND s_k.s_check[l_mbutton] = TRUE AND s_k.s_done[l_mbutton] = 1
s_k.s_done[l_mbutton] = 2

ENDIF



IF bt = TRUE  AND s_k.s_check[l_mbutton] = FALSE AND s_k.s_done[l_mbutton] = 0
s_k.s_done[l_mbutton] = 1
s_k.s_check[l_mbutton] = TRUE

// ELSE
// s_k.s_done[l_mbutton] = 0
ENDIF


// IF bt = FALSE  AND s_k.s_check[l_mbutton] = TRUE AND s_k.s_done[l_mbutton] = 2
// s_k.s_done[l_mbutton] = 3
// s_k.s_check[l_mbutton] = FALSE
//
// ENDIF

IF bt = FALSE AND s_k.s_check[l_mbutton] = TRUE  //AND s_k.s_done[l_mbutton] = 3
s_k.s_done[l_mbutton] = 0
s_k.s_check[l_mbutton] = FALSE
ENDIF


RETURN s_k.s_done[l_mbutton]
ENDFUNCTION

TYPE T_mousehit

s_done%[6]
s_check%[6]
ENDTYPE
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Metamorphose

Danke!
Ich habe nun angefangen ein fake os zu schreiben (dies soll nur sekunden leicht überzeugen), dabei ist ein ordner offen. klickt man auf dem desktop auf den ordner, soll der offene ordner sich schliessen. klickt man wiederrum auf den ordner, soll er sich wieder öffnen. er öffnet sich aber nicht wieder. ich benutze genau diese funktion. sitze seit 2 h dran und kapier es nicht, obwohl es doch so einfach sein müsste.
hier der code

Code (glbasic) Select

stpc=1 //am fakepc
GETSPRITESIZE 51, bb1, bh1; GETSPRITESIZE 52, bb2, bh2 //nimmt höhe und breite versch. bilder, die ersten paar sind die ordner
GETSPRITESIZE 53, bb3, bh3; GETSPRITESIZE 54, bb4, bh4
GETSPRITESIZE 55, bb5, bh5; GETSPRITESIZE 56, bb6, bh6
GETSPRITESIZE 57, bb7, bh7
bx1=180; by1=350; bx2=180; by2=350 //koordinaten ordner und offener ordner


LOCAL mx%,my%,a%,b%, fen1 //fen1 steht für offener ordner (fenster)
fen1=1
SYSTEMPOINTER TRUE

WHILE stpc=1 //stpc ist der fakepc

    MOUSESTATE mx%,my%,a%,b%
 
IF fen1=1 //ist fen1 an ergo hintergrundbild, fenster und paar icons
DRAWSPRITE 3, 0, 0
DRAWSPRITE 52, bx2, by2 //eig2
DRAWSPRITE 53, 160, 80 //fen
DRAWSPRITE 54, 180, 105 //romanico
DRAWSPRITE 56, 260, 105 //wowico
ELSEIF fen1=0 //ist fen1 nicht aktiv ergo nur hintergrund und ordnericon
DRAWSPRITE 3, 0, 0
DRAWSPRITE 51, bx1, by1 //eig1
ENDIF



IF mx% > bx2 AND mx% < bx2+bb2 AND my% > by2 AND my% < by2+bh2 AND MouseHit(a,1) = 1 AND fen1=1
// ist maus gedrückt dann sag was
fen1=0
ENDIF
IF mx% > bx1 AND mx% < bx1+bb1 AND my% > by1 AND my% < by1+bh1 AND MouseHit(a,1) = 1 AND fen1=0
// ist maus gedrückt dann sag was
fen1=1
ENDIF

PRINT fen1+":"+MouseHit(a,1), 100, 100 //für mich zur überprüfung

SHOWSCREEN
WEND
lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

D2O

Moin moin,
ein Gutes neues noch Nachträglich :)

Ohne die ganzen Grafiken und den Code ist es schwer etwas nach zu vollziehen, aber in Deinem Codeschnipsel konnte ich mal soweit nichts falschen feststellen.

Die Function MouseHit ist aber schon im gesammten Code mit dabei und nur in diesem Schnipsel nicht, oder?

Ich habe jetzt mal in Deinem Code ein Rechteck eingebaut das von links nach rechts läuft.
Klickt man auf dieses Rechteck ändert sich dir X-Achsen richtung.
Das Funktioniert bei mir Tadellos.

Schau Die mal auch die Funktion Bnot() an, die ist auch ganz nützlich wenn man "nur" 2 zustände braucht.

Ich hoffe das hilft Dir weiter.

Code (glbasic) Select
stpc=1 //am fakepc
//GETSPRITESIZE 51, bb1, bh1; GETSPRITESIZE 52, bb2, bh2 //nimmt höhe und breite versch. bilder, die ersten paar sind die ordner
//GETSPRITESIZE 53, bb3, bh3; GETSPRITESIZE 54, bb4, bh4
//GETSPRITESIZE 55, bb5, bh5; GETSPRITESIZE 56, bb6, bh6
//GETSPRITESIZE 57, bb7, bh7
//bx1=180; by1=350; bx2=180; by2=350 //koordinaten ordner und offener ordner


   LOCAL mx%,my%,a%,b%, fen1 //fen1 steht für offener ordner (fenster)
   fen1=1
   SYSTEMPOINTER TRUE

   WHILE stpc=1 //stpc ist der fakepc
   
    MOUSESTATE mx%,my%,a%,b%
     
//   IF fen1=1 //ist fen1 an ergo hintergrundbild, fenster und paar icons
//   DRAWSPRITE 3, 0, 0
//   DRAWSPRITE 52, bx2, by2 //eig2
//   DRAWSPRITE 53, 160, 80 //fen
//   DRAWSPRITE 54, 180, 105 //romanico
//   DRAWSPRITE 56, 260, 105 //wowico
//   ELSEIF fen1=0 //ist fen1 nicht aktiv ergo nur hintergrund und ordnericon
//   DRAWSPRITE 3, 0, 0
//   DRAWSPRITE 51, bx1, by1 //eig1
//   ENDIF

//// Start Mein Test

DRAWRECT rectx%,recty%,32,32,RGB(0xff, 0x4a, 0x4a)

IF mx% > rectx% AND mx% < rectx%+32 AND my% > recty% AND my% < recty%+32 AND MouseHit(a,1) = 1
fen1 = bNOT(fen1)
ENDIF



IF fen1 = 1
INC rectx%,1
ELSE
DEC rectx%,1
ENDIF

/// Bildschirmauflösung ist 800 x 600 Pixel
IF rectx% > 800 THEN rectx% = -32
IF rectx% < -32 THEN rectx% = 800

/// Ende Mein Test

//      IF mx% > bx2 AND mx% < bx2+bb2 AND my% > by2 AND my% < by2+bh2 AND MouseHit(a,1) = 1 AND fen1=1
//      // ist maus gedrückt dann sag was
//      fen1=0
//      ENDIF
//      IF mx% > bx1 AND mx% < bx1+bb1 AND my% > by1 AND my% < by1+bh1 AND MouseHit(a,1) = 1 AND fen1=0
//      // ist maus gedrückt dann sag was
//      fen1=1
//      ENDIF

   PRINT fen1+":"+MouseHit(a,1), 100, 100 //für mich zur überprüfung

   SHOWSCREEN
   WEND







// bt% =  Mousebutton,
// l_mbutton = standart linke mousetaste
// es können gesammt 7 Tasten abgefragt werden
// l_mbutton = 0 sollte aber reserviert bleiben
FUNCTION MouseHit% : bt%, l_mbutton% = 1



STATIC s_k AS T_mousehit


IF bt = TRUE  AND s_k.s_check[l_mbutton] = TRUE AND s_k.s_done[l_mbutton] = 1
s_k.s_done[l_mbutton] = 2

ENDIF



IF bt = TRUE  AND s_k.s_check[l_mbutton] = FALSE AND s_k.s_done[l_mbutton] = 0
s_k.s_done[l_mbutton] = 1
s_k.s_check[l_mbutton] = TRUE

// ELSE
// s_k.s_done[l_mbutton] = 0
ENDIF


// IF bt = FALSE  AND s_k.s_check[l_mbutton] = TRUE AND s_k.s_done[l_mbutton] = 2
// s_k.s_done[l_mbutton] = 3
// s_k.s_check[l_mbutton] = FALSE
//
// ENDIF

IF bt = FALSE AND s_k.s_check[l_mbutton] = TRUE  //AND s_k.s_done[l_mbutton] = 3
s_k.s_done[l_mbutton] = 0
s_k.s_check[l_mbutton] = FALSE
ENDIF


RETURN s_k.s_done[l_mbutton]
ENDFUNCTION

TYPE T_mousehit

s_done%[6]
s_check%[6]
ENDTYPE
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Metamorphose

hab noch n bild vom fake-pc gemacht. klickt man auf deskacc ist das fenster weg, klickt man wieder auf deskacc kommt nix und die variable schaltet auch nicht. ja, mousehit ist drin, das war nur der schnippsel mit dem fakepc.

[attachment deleted by admin]
lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

D2O

Hmmm,

kannst Du ein kleines Lauffähiges beispiel schreiben, mit denn jetzt benutzten Variablen und den Projektordner zum Download anbieten?
Ich schaus mir dann am WE an was da nicht läuft.

Also wo nur 2 Grafiken enthalten sind,
einmal die deskacc grafik und eine Fenstergrafik.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell