Author Topic: Kollisionsabfrage funktioniert bei erstem Spiel in GlBasic nicht.  (Read 3945 times)

Offline Metamorphose

  • Mr. Drawsprite
  • **
  • Posts: 82
    • View Profile
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

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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

Offline Metamorphose

  • Mr. Drawsprite
  • **
  • Posts: 82
    • View Profile
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

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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

Offline Metamorphose

  • Mr. Drawsprite
  • **
  • Posts: 82
    • View Profile
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

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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