December 03, 2020, 08:23:30 PM

Author Topic: [bb] Mouse Routine by Snarty [ 1+ years ago ]  (Read 521 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Mouse Routine by Snarty [ 1+ years ago ]
« on: June 29, 2017, 12:28:40 AM »
Title : Mouse Routine
Author : Snarty
Posted : 1+ years ago

Description : A mouse routine for full screen programs including double buffering.

Code :
Code: BlitzBasic
  1. ; mx,my = Mouse position
  2. ; hmbut = wether Left mouse button held down
  3. ; mbut  = last mouse button pressed
  4. ; mstop = Send this as true from ALL functions to stop over hitting mouse button
  5.  
  6. Global mx,my,hmbut,mbut,mstop,mmx,mmy
  7. Dim mouse(4)
  8.  
  9. Graphics 800,600,0,1                            ; Set full screen, for proper testing.
  10. ChangeDir "C:My DocumentsMy ProjectsSprite Editor"
  11.  
  12. mouse(0)=LoadImage("Interface GFXmouse.bmp")            ; Grab these images from SMB editors (Interface GFX) drawer
  13. AutoMidHandle True                                                                      ; Or name your own images.
  14. mouse(1)=LoadImage("Interface GFXmouseplot.bmp")
  15. AutoMidHandle False
  16.  
  17. SetBuffer BackBuffer()
  18. holdscreen = CreateImage(800,600)       ; create, in effect, a 3rd buffer screen.
  19. ;
  20. ;  ** Create all of fixed/background screen gfx here, ie - build the main screen gfx (speeds gfx drawing with one block)
  21. ;
  22. GrabImage holdscreen,0,0 ; Place static background into memory
  23.  
  24. While Not KeyDown(1)                            ; Wait for escape key,
  25.         setup(holdscreen,False,0)               ; First pass
  26.         ;
  27.         ; ** Do gfx updates, mouse checking etc. (Replace with your code)
  28.         ;
  29.         setup(holdscreen,True,0)                ; Finally overlay mouse, and update display
  30. Wend
  31.  
  32. EndGraphics
  33. End
  34.  
  35. Function SetUp(Image,Way,MouseStyle)                            ; Use Way=False for initial setup of screen, then "True" for gfx & mouse updates.
  36.  
  37.         DebugLog mouse(0)
  38.        
  39.         getf1=KeyDown(59)                                                               ;
  40.         If getf1=True                                                                   ;
  41.                 GrabImage screengrab,0,0                                        ; F1 Screen grab function
  42.                 SaveImage screengrab,"Screengrab.bmp"           ;
  43.         EndIf                                                                                   ;
  44.  
  45.         If way=False
  46.        
  47.                 Cls                                                                                     ; Start of double buffer routine
  48.                 DrawBlock Image,0,0                                                     ; Draw the 3rd buffer on the back buffer with no transparancy.
  49.                 If mousestyle>-2                                                        ; See Below about mousestyles.
  50.                         mmx=MouseXSpeed():mmy=MouseYSpeed()             ; Holds the last registered mouse speeds in a global, for stability.
  51.                         mbut=GetMouse():hmbut=MouseDown(1)              ; grab main left mouse button (hmbut) and also check button clicked last.
  52.                         If hmbut=True And mstop=True                    ; mstop = global var to stop mouse clicks being overlapped in routines.
  53.                                 hmbut=False:mbut=False                          ; is mstop = true, and left button is pressed down, then ignore new click
  54.                         Else                                                                    ; or
  55.                                 If hmbut=False And mstop=True           ; reset mstop to false if the left mouse button has been released.
  56.                                         mstop=False
  57.                                 EndIf
  58.                         EndIf
  59.                 EndIf
  60.        
  61.         Else
  62.                 If mousestyle<>-1                                               ; mousestyle set at -1 = no mouse image to draw.
  63.                         If mousestyle>-2                                        ; mousestyles you wish to display above -1 (ie, check above).
  64.                                 mx=MouseX() : my=MouseY()               ; grab the mouse x and y position into vars mx,my to keep all checks the same.
  65.                                 MoveMouse mx+mmx,my+mmy                 ; move the hardware mouse co-ords to the last check pos, mmx & mmy = speed.
  66.                         Else
  67.                                 mousestyle=Abs(mousestyle)-2    ; Used to avoid moving, and re-checking the mouse if the program uses its own routine.
  68.                         EndIf
  69.                         DrawImage mouse(mousestyle),mx,my       ; Actually Draw the mouse image on the screen, in the original check position.
  70.                 Else
  71.                         MouseStyle=0           
  72.                 EndIf
  73.                
  74.                
  75.                 Flip                                                                    ; Double buffer stuff
  76.                 VWait                                                                   ; Wait for a vertical blank, in order to sync.
  77.  
  78.         EndIf
  79. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal