Seite 1 von 1

Maus-Einbindung geht nicht

Verfasst: 11.11.2005 15:02
von PB42
Hallo,

folgender Code soll als Übung per Mausklick eine rote Kachel auf den Bildschirm bringen, nachdem eine blaue schon da ist. Geht aber nicht. Wieso?

Code: Alles auswählen

InitSprite()
InitMouse()
InitKeyboard()
OpenScreen(800,600,16,"") 

LoadSprite(0,"sprite\Kreuz.bmp")
LoadSprite(1,"sprite\blau.bmp")
LoadSprite(2,"sprite\rot.bmp")   

Repeat
    ClearScreen(0,200,0)
    ExamineKeyboard()
    ExamineMouse()
    TransparentSpriteColor(0,255,0,255)

        DisplayTransparentSprite(1,20,20)
        DisplayTransparentSprite(0,MouseX()-32,MouseY()-32) 
        FlipBuffers()

    If MouseButton(1) And MouseX > 20 And MouseX < 217 And  MouseY > 20 And MouseY < 217
    DisplayTransparentSprite(2,240,20)
    FlipBuffers()
    EndIf
    
    If KeyboardPushed(#PB_key_escape)
    End
    EndIf
 ForEver
Danke für Hilfe.
PB42

Verfasst: 11.11.2005 15:08
von PB42
OK, ich hab's selber gemerkt: Flüchtigkeitsfehler, denn hinter MouseX und MouseY gehört (), ABER: Die rote Kachel, (sofern man das als rot bezeichnen kann), bleibt nur so lange im Bild wie die linke Maus-Taste gedrückt wurde. Ist mir schon klar wieso.

PB42

Verfasst: 11.11.2005 15:09
von Kaeru Gaman
probier mal, Flipbuffers() nur einmal am ende der schleife zu verwenden...

[edit]

und noch ne stilfrage:

Code: Alles auswählen

    If KeyboardPushed(#PB_key_escape) 
    End 
    EndIf 
 ForEver
warum nicht:

Code: Alles auswählen

Until KeyboardPushed(#PB_key_escape) 
was ist an endlosschleifen und der break-philosophie nur so schick?

Verfasst: 11.11.2005 15:20
von PB42
Wenn ich FlipBuffers() nur einmal am Ende der Schleife verwende, kommt die Kachel richtig schön rot, schön! Ich selber schaffe es aber im Moment noch nicht, zu realisieren, daß beim Mausklick die rote Kachel dauerhaft stehenbleibt. Wie geht das? Danke.

PB42

P.S: Until KeyboardPushed(#PB_key_escape) ist natürlich besser. Danke für beide Hinweise.

Verfasst: 11.11.2005 15:36
von PB42
Ich habe selber ne Lösung gefunden, wie die rote Kachel stehen bleibt, aber andere können das bestimmt eleganter:

Code: Alles auswählen

InitSprite() 
InitMouse() 
InitKeyboard() 
OpenScreen(800,600,16,"") 

LoadSprite(0,"sprite\Kreuz.bmp") 
LoadSprite(1,"sprite\blau.bmp") 
LoadSprite(2,"sprite\rot.bmp")    

Repeat 
    ClearScreen(0,200,0) 
    ExamineKeyboard() 
    ExamineMouse() 
    TransparentSpriteColor(0,255,0,255) 

        DisplayTransparentSprite(1,20,20) 
        DisplayTransparentSprite(0,MouseX()-32,MouseY()-32) 

           If Schalt = 1
           Goto Schalt1
           EndIf
     If MouseButton(1) And MouseX() > 20 And MouseX() < 217 And
          MouseY() > 20 And MouseY() < 217 
          Schalt = 1
          Schalt1:
          DisplayTransparentSprite(2,240,20) 
    EndIf 
      
        FlipBuffers() 
    
Until KeyboardPushed(#PB_key_escape)
Aber wieso verschwindet dann der Mauszeiger UNTER der roten Kachel???

PB42

Verfasst: 11.11.2005 15:57
von freedimension
Öhm, wenn du Sprite 2 nach Sprite 0 zeichnest dürfte das doch eigentlich klar sein warum, oder? Du tust ja auch nicht zuerst deine Wand tapezieren und danach erst grundieren ;)

Verfasst: 11.11.2005 18:07
von PB42
Genau das hatte ich mir auch in der Zwischenzeit überlegt, als ich in der Stadt war. Trotzdem Danke.

PB42