Seite 1 von 1

MouseButton ausbremsen ?

Verfasst: 18.02.2006 20:32
von kdeparade
Wie kann man einen Mousebutton(1) zurücksetzen?
Ich arbeite im Screen-Modus.
Fange Mousebutton(1) ab, allerdings wird das "gedrückt" wahrscheinlich über mehrere Programmdurchläufe(schneller Rechner) auch jedesmal wieder ausgewertet.
Ich möchte aber nur die entspechende Aktion einmal ausgeführt haben.
Muss ich eine Zeitverzögerung einbauen? Möchte aber auch das Prog nicht ausbremsen.

Gruss KUD

Verfasst: 18.02.2006 20:45
von zigapeda
Du kannst ja eine Variable auf 1 setzen wenn die Maus gedrückt wird und sobald sie wieder los gelassen wird wieder auf 0

Code: Alles auswählen

If Not MouseButton(1) And mouseklick
  mouseklick = 0
ElseIf MouseButton(1) And Not mouseklick
  mouseklick = 1
  ; hier kommt der einmal aufzuführende code rein
EndIf
Ich hoffe du hast schon PB4, sonst geht der code nicht
wenn du noch das alte hast dann nehm den hier:

Code: Alles auswählen

If MouseButton(1) <> 0 And mouseklick
  mouseklick = 0
ElseIf MouseButton(1) And mouseklick <> 0
  mouseklick = 1
  ; hier kommt der einmal aufzuführende code rein
EndIf

Verfasst: 18.02.2006 21:51
von kdeparade
Mit Deinem Code kommt aber gar kein Ereignis zustande.

Code: Alles auswählen

 If MouseButton(1) <> 0 And mouseklick
      mouseklick = 0
  ElseIf MouseButton(1) And mouseklick <> 0
      mouseklick = 1
      arrayindex = 0
      mx.w = MouseX() 
      my.w = MouseY() 
      arrayindex = 0 
      Repeat
         If element(arrayindex)\Bildtyp = 2 ; wenn Typ = Schalter
           If SpriteCollision(arrayindex,element(arrayindex)\Bildposix,element(arrayindex)\Bildposiy,98,mx,my) ; teste ob Knopf Speichern gedrückt
              If element(arrayindex)\Bildanzeige = 99  ; ist 2. Bild schon aktiviert ??
                element(arrayindex)\Bildanzeige = 1 ; zurück zur normalen Anzeige (deaktivierter Schalter)
                schalterstring = element(arrayindex)\Wert + Chr(13) ; Ausschalten -fülle String zur Ccontrol
              Else
                element(arrayindex)\Bildanzeige = 99 ; zeige 2. Bild an
                schalterstring = element(arrayindex)\Wert + Chr(13) ; Einschalten -fülle String zur Ccontrol
              EndIf 
              Break   ; da man annimmt dass nur ein Schalter gleichzeitig gedr. werden kann ;-)  
           EndIf
         EndIf    
        arrayindex + 1 ; Index für Array um 1 erhöhen
      Until arrayindex > elementezahl  
  EndIf

Verfasst: 19.02.2006 01:15
von STARGÅTE
Ich habe es bei mir immer so gemacht :

Code: Alles auswählen

If MouseButton(1) <> 0 And MouseButton_1 = 0 :
 MouseButton_1 = 1
 ; Hier kommt der einmalige Code rein
ElseIf MouseButton(1) = 0 :
 MouseButton_1 = 0
EndIf

Verfasst: 19.02.2006 01:20
von Macros
Hier ein Beispielcode:

Code: Alles auswählen

OpenWindow(1,200,200,200,200,"","test")
InitSprite()
OpenWindowedScreen(WindowID(),0,0,200,200,0,0,0)
InitMouse()
AddKeyboardShortcut(1,#PB_Shortcut_Escape,1)
Repeat
event=WindowEvent()
ExamineMouse()
If MouseButton(1) = 0 And mouseklick
  mouseklick = 0
ElseIf MouseButton(1) And mouseklick = 0
  mouseklick = 1
  Debug "Klick"
  ; hier kommt der einmal aufzuführende code rein
EndIf
If event=#PB_Event_Menu
End
EndIf
ForEver
@Zigapeda: aus <> mach = :wink:

Verfasst: 19.02.2006 03:58
von zigapeda
Macros hat geschrieben:@Zigapeda: aus <> mach = :wink:
hmm jo stimmt, aber der erste, der ist richtig, funktioniert aber auch nicht richtig oO
hab ihn nochmal geändert, auch wenn schon funktionierende lösungen da sind...

Code: Alles auswählen

If Mousebutton(1) = 0 And Mouseklick = 1
  Mouseklick = 0
ElseIf Mousebutton(1) = 1 And Mouseklick = 0
  Mouseklick = 1
  ;hier der code
EndIf