Code archives/User Input/Mouse Routine
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
A mouse routine for full screen programs including double buffering. | |||||
; mx,my = Mouse position ; hmbut = wether Left mouse button held down ; mbut = last mouse button pressed ; mstop = Send this as true from ALL functions to stop over hitting mouse button Global mx,my,hmbut,mbut,mstop,mmx,mmy Dim mouse(4) Graphics 800,600,0,1 ; Set full screen, for proper testing. ChangeDir "C:\My Documents\My Projects\Sprite Editor" mouse(0)=LoadImage("Interface GFX\mouse.bmp") ; Grab these images from SMB editors (Interface GFX) drawer AutoMidHandle True ; Or name your own images. mouse(1)=LoadImage("Interface GFX\mouseplot.bmp") AutoMidHandle False SetBuffer BackBuffer() holdscreen = CreateImage(800,600) ; create, in effect, a 3rd buffer screen. ; ; ** Create all of fixed/background screen gfx here, ie - build the main screen gfx (speeds gfx drawing with one block) ; GrabImage holdscreen,0,0 ; Place static background into memory While Not KeyDown(1) ; Wait for escape key, setup(holdscreen,False,0) ; First pass ; ; ** Do gfx updates, mouse checking etc. (Replace with your code) ; setup(holdscreen,True,0) ; Finally overlay mouse, and update display Wend EndGraphics End Function SetUp(Image,Way,MouseStyle) ; Use Way=False for initial setup of screen, then "True" for gfx & mouse updates. DebugLog mouse(0) getf1=KeyDown(59) ; If getf1=True ; GrabImage screengrab,0,0 ; F1 Screen grab function SaveImage screengrab,"Screengrab.bmp" ; EndIf ; If way=False Cls ; Start of double buffer routine DrawBlock Image,0,0 ; Draw the 3rd buffer on the back buffer with no transparancy. If mousestyle>-2 ; See Below about mousestyles. mmx=MouseXSpeed():mmy=MouseYSpeed() ; Holds the last registered mouse speeds in a global, for stability. mbut=GetMouse():hmbut=MouseDown(1) ; grab main left mouse button (hmbut) and also check button clicked last. If hmbut=True And mstop=True ; mstop = global var to stop mouse clicks being overlapped in routines. hmbut=False:mbut=False ; is mstop = true, and left button is pressed down, then ignore new click Else ; or If hmbut=False And mstop=True ; reset mstop to false if the left mouse button has been released. mstop=False EndIf EndIf EndIf Else If mousestyle<>-1 ; mousestyle set at -1 = no mouse image to draw. If mousestyle>-2 ; mousestyles you wish to display above -1 (ie, check above). mx=MouseX() : my=MouseY() ; grab the mouse x and y position into vars mx,my to keep all checks the same. MoveMouse mx+mmx,my+mmy ; move the hardware mouse co-ords to the last check pos, mmx & mmy = speed. Else mousestyle=Abs(mousestyle)-2 ; Used to avoid moving, and re-checking the mouse if the program uses its own routine. EndIf DrawImage mouse(mousestyle),mx,my ; Actually Draw the mouse image on the screen, in the original check position. Else MouseStyle=0 EndIf Flip ; Double buffer stuff VWait ; Wait for a vertical blank, in order to sync. EndIf End Function |
Comments
None.
Code Archives Forum