Smooth Scrolling With The Mousewheel

Blitz3D Forums/Blitz3D Beginners Area/Smooth Scrolling With The Mousewheel

Clyde(Posted 2004) [#1]
Hiya!

I've been having all sorts of nightmares with getting smoother scrolling up and down with using the mouse wheel. When saying smoother, I mean the image scrolls according to how fast the mouse wheel is moved. As you'll see from the example below it's not right. And would love help me getting it working correctly.

Cheers so much!

;-========================-
;-=[Mouse Scroll Wheel	]=-
;-=[Moving Image Program]=-
;-========================-

Const xres=640,yres=480
Graphics xres,yres
SetBuffer BackBuffer()

Global Scroll_Image=CreateImage(xres-100,1000)
	SetBuffer ImageBuffer(Scroll_Image)
		Color 164,000,000
		Rect 100,0,xres-100,yres,1
		
		For Bits=0 To Rnd(200)
			Color Rnd(60,250),Rnd(60,255),Rnd(60,255)
			Rect Rnd(100,xres),Rnd(0,yres),Rnd(4,20),Rnd(4,20)
		Next
	SetBuffer BackBuffer()
	
Global MY#

While Not KeyHit(1)
Cls
	Update_Image_With_Scroll_Wheel()			
Flip
Wend



Function Update_Image_With_Scroll_Wheel()

MY=MouseZ()+MouseZSpeed()
;-============================-
;-=[Draw And Move The Screen]=-
;-============================-
DrawImage Scroll_Image,0,MY
End Function



WolRon(Posted 2004) [#2]
Is this what you mean?
;-========================-
;-=[Mouse Scroll Wheel	]=-
;-=[Moving Image Program]=-
;-========================-

Const xres=640,yres=480
Graphics xres,yres
SetBuffer BackBuffer()

Global Scroll_Image=CreateImage(xres-100,1000)
	SetBuffer ImageBuffer(Scroll_Image)
		Color 164,000,000
		Rect 100,0,xres-100,yres,1
		
		For Bits=0 To Rnd(200)
			Color Rnd(60,250),Rnd(60,255),Rnd(60,255)
			Rect Rnd(100,xres),Rnd(0,yres),Rnd(4,20),Rnd(4,20)
		Next
	SetBuffer BackBuffer()
	
Global MY#

While Not KeyHit(1)
Cls
	Update_Image_With_Scroll_Wheel()			
Flip
Wend



Function Update_Image_With_Scroll_Wheel()

MY=MY + MouseZSpeed()*10
;-============================-
;-=[Draw And Move The Screen]=-
;-============================-
DrawImage Scroll_Image,0,MY
End Function



WolRon(Posted 2004) [#3]
or are you looking for something like this:
;-========================-
;-=[Mouse Scroll Wheel	]=-
;-=[Moving Image Program]=-
;-========================-

Const xres=640,yres=480
Graphics xres,yres
SetBuffer BackBuffer()

Global Scroll_Image=CreateImage(xres-100,1000)
SetBuffer ImageBuffer(Scroll_Image)
Color 164,000,000
Rect 100,0,xres-100,yres,1

For Bits=0 To Rnd(200)
	Color Rnd(60,250),Rnd(60,255),Rnd(60,255)
	Rect Rnd(100,xres),Rnd(0,yres),Rnd(4,20),Rnd(4,20)
Next
SetBuffer BackBuffer()
	
Global MY#
Global lastupdate = MilliSecs()



While Not KeyHit(1)
Cls
	Update_Image_With_Scroll_Wheel()			
Flip False
Wend



Function Update_Image_With_Scroll_Wheel()
	action = MouseZSpeed()
	If action <> 0
		thisupdate = MilliSecs()
	Else
		thisupdate = lastupdate
	EndIf
	timeelapsed = (thisupdate - lastupdate) / 10
	If timeelapsed > 20 Then timeelapsed = 20
	MY=MY + action*(21 - timeelapsed)
	;-============================-
	;-=[Draw And Move The Screen]=-
	;-============================-
	DrawImage Scroll_Image,0,MY
	lastupdate = thisupdate
End Function



Clyde(Posted 2004) [#4]
Fabulous Mate, thanks! :)


Clyde(Posted 2004) [#5]
Also, how would I add in to the routine a limit - so that it doesn't scroll and register the scroll wheel moving when and if the top and bottom of the image is scrolled to it's boundary?

Thank ever so much :)


WolRon(Posted 2004) [#6]
Well, you don't need my help to do that. Just don't allow MY# to be any larger or smaller than a certain value. It's not as hard as you think.


altitudems(Posted 2004) [#7]
What about this:

;-========================-
;-=[Mouse Scroll Wheel	]=-
;-=[Moving Image Program]=-
;-========================-

Const xres=640,yres=480
Graphics xres,yres
SetBuffer BackBuffer()

Global Scroll_Image=CreateImage(xres-100,1000)
SetBuffer ImageBuffer(Scroll_Image)
Color 164,000,000
Rect 100,0,xres-100,yres,1

For Bits=0 To Rnd(200)
	Color Rnd(60,250),Rnd(60,255),Rnd(60,255)
	Rect Rnd(100,xres),Rnd(0,yres),Rnd(4,20),Rnd(4,20)
Next
SetBuffer BackBuffer()
	
Global MY#,MRY#
Global lastupdate = MilliSecs()



While Not KeyHit(1)
Cls
	Update_Image_With_Scroll_Wheel()			
Flip False
Wend



Function Update_Image_With_Scroll_Wheel()
	action = MouseZSpeed()
	If action <> 0
		thisupdate = MilliSecs()
	Else
		thisupdate = lastupdate
	EndIf
	timeelapsed = (thisupdate - lastupdate) / 10
	If timeelapsed > 20 Then timeelapsed = 20
	MY=MY + action*(21 - timeelapsed)
	MRY=MRY+(MY - MRY)/100
	;-============================-
	;-=[Draw And Move The Screen]=-
	;-============================-
	DrawImage Scroll_Image,0,MRY
	lastupdate = thisupdate
End Function