Dragging an object with the mouse

BlitzPlus Forums/BlitzPlus Programming/Dragging an object with the mouse

QuickSilva(Posted 2003) [#1]
Hello,

I`ve got a small problem with dragging an object, hopefully someone can help tell me why that this is happening.
The problem is that I have an object on the screen and I want to be able to move it by firstly clicking on it
and while the mouse button is still pressed down I want it to follow the mouse and be release in it`s new
location when I release the mouse button. Sounds simple enough.

I have hidden the pointer and loaded an image to replace it so that I can detect a collision between it and
the object.

Here`s the code and the problem.

;-------------------------------
if imagesoverlap(pointer,mousex(),mousey(),object,xpos,ypos) and mousedown(1)
xpos=mousex()
ypos=mousey()
endif

drawimage object,xpos,ypos
drawimage pointer,mousex(),mousey()
;-------------------------------

This works to some extent but the problem is that when I move the mouse to fast the object is droppped when
I really want it to stay with the mouse until I let go of the mouse button.

Any ideas on the cause of this and how I could rectify the problem?

Thanks,
Jason.


dynaman(Posted 2003) [#2]
Only check for images collide when the mouse is first pressed down, if it is do the drag till the mouse is no longer down.

You will need to use a variable to keep track of if the mouse is 'dragging'

try the following

if imagesoverlap(pointer,mousex(),mouse(),object,xpos,ypos) and mousedown(1) or mousedown(1) and drag = 1 then
xpos=mousex()
ypos=mousey()
drag = 1
else
drag = 0
endif


Ross C(Posted 2003) [#3]
try this piece of code.the cx and cy stuff are just so when you start dragging the image, it doesn't jump to the mouse's location :)

Graphics 800,600




pointer=CreateImage(2,2)
SetBuffer ImageBuffer(pointer)
Color 140,140,180
Rect 0,0,2,2,1
Color 255,255,255

image=CreateImage(10,10)
SetBuffer ImageBuffer(image)
Rect 0,0,10,10,1
ix=300
iy=300

cx=0;offset for dragging
cy=0;offset for dragging

SetBuffer BackBuffer()

While Not KeyHit(1)
Cls

	If MouseDown(1) Then
		If ImagesOverlap(pointer,MouseX(),MouseY(),image,ix+cx,iy+cy) And drag=0 Then
				drag=1
				cx=ix-MouseX()
				cy=iy-MouseY()
		End If
	Else
		drag=0
		ix=ix+cx
		iy=iy+cy
		cx=0
		cy=0
	End If
	
	
	If drag=1 Then
		ix=MouseX()
		iy=MouseY()
	End If
	
	
	DrawImage image,ix+cx,iy+cy
	DrawImage pointer,MouseX(),MouseY()
	Flip
Wend




QuickSilva(Posted 2003) [#4]
Thanks for the help, now it works :)
Jason.