ПроЭктировщик
Регистрация: 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
|