Показать сообщение отдельно
Старый 22.06.2012, 20:56   #1
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Выбор одного объекта или множества

Вот реализовал выбор мышью в 2д одного или несколько объектов.
Единственно пока не устранил ,если выбрать объект и прервать движение ,то следующий выбранный объект продолжит движение предыдущего.

Управление :
Выбор - левой кнопкой мыши (пикнуть или рамкой)
когда объект выбран или несколько (нажав левую кнопку )объект движется в координаты (пикнутые ).
Сброс - правая кнопка мыши
Сам код:
Global a.tip
Global mouse=False , sel = False 

Type tip
	Field x , y , selected
End Type 

For i = 0 To 10
	a.tip = New tip 
	a\x = Rnd(100,700)
	a\y = Rnd(100,500)
	a\selected = False
Next 


	Graphics 800,600,2 
SetBuffer BackBuffer() 


While Not KeyHit(1) 
ClsColor 100,100,120
Cls 


For aa.tip = Each tip

	If MouseDown(2)=True Then 
	aa\selected = False
	sel = False
	mouse=False
	oldx =MouseX()
	oldy =MouseY()
	dx=MouseX()
	dy=MouseY()
	End If 

If sel = False Then 
                If mouse=False Then
                        If MouseDown(1)=True Then
                                mouse=True
                                oldx =MouseX()
                                oldy =MouseY()
                                dx=MouseX()
                                dy=MouseY()
                        End If
                Else
                        dx=MouseX()
                        dy=MouseY()
                        If MouseDown(1)=False Then
                                mouse=False
                        End If
                End If

	If dx<oldx  Then
                x=dx
                w=oldx -dx
        Else
                x=oldx 
                w=dx-oldx 
        End If
        If dy<oldy Then
                y=dy
                h=oldy-dy
        Else
                y=oldy
                h=dy-oldy
        End If

	If mouse=True Then 
		Line  dx ,dy , oldx ,dy 
		Line  oldx ,dy , oldx ,oldy
		Line  oldx ,oldy , dx ,oldy
		Line  dx ,oldy , dx ,dy	
	End If 
	
	If RectsOverlap(aa\x-5,aa\y-5,10,10,x,y,w,h)=True Or Dis(dx,dy, aa\x,aa\y)<25 Then 
	aa\selected = True 
	If mouse = False Then sel = True 
	Else
	aa\selected = False
	sel = False
	End If 
		
Else 
	If MouseDown(1)=True Then 
		down = True 
		dxx=MouseX()
		dyy=MouseY()
	Else 
		If aa\x = dxx And aa\y = dyy Then down = False
	End If 
End If


	
	If aa\selected = True Then 
			If down = True 
				If aa\x < dxx Then aa\x = aa\x +1
				If aa\x > dxx Then aa\x = aa\x -1
				If aa\y < dyy Then aa\y =aa\y +1
				If aa\y > dyy Then aa\y =aa\y -1
			End If 
		Text aa\x,aa\y-10,"select"			
	End If 

	Text aa\x+2,aa\y+2,"@"
	Plot aa\x+5,aa\y+5
Next 


	
	Text 10,20,"dx - "+dx+" dy - "+dy+" oldx - "+oldx +" oldy - "+oldy+" dxx - "+dxx+" dyy - "+dyy  
	Text 10,30," sel - "+sel +" down - "+down+" mouse - "+mouse 
Flip 
Wend 
Delete Each tip
End 

Function Dis(X1,Y1, xx,yy)
Return Abs(((xx-X1)*(xx-X1)+(yy-Y1)*(yy-Y1))^0.5)
End Function
(Offline)
 
Ответить с цитированием