Maus-Einbindung geht nicht

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Maus-Einbindung geht nicht

Beitrag 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
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag 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.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag 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
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag 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 ;)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Genau das hatte ich mir auch in der Zwischenzeit überlegt, als ich in der Stadt war. Trotzdem Danke.

PB42
Antworten