Показать сообщение отдельно
Старый 01.02.2007, 01:55   #14
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Выделение мышкой

вот пример:
Graphics3D 800,600,16,1
SetBuffer BackBuffer()

Type unit
	Field ent,sel
End Type

cam=CreateCamera()
PositionEntity cam,0,60,0
RotateEntity cam,60,0,0

p=CreatePlane()
EntityColor p,0,128,0

SeedRnd MilliSecs()
For i=1 To 10
	u.unit=New unit
	u\ent=CreateCube()
	PositionEntity u\ent,Rnd(-100,100),3,Rnd(-100,100)
	u\sel=0
Next
Local ox#,oy#,cx#,cy#,tx#,ty#
While Not KeyDown(1)
	If MouseX()<5 Then TranslateEntity cam,-0.5,0,0
	If MouseX()>795 Then TranslateEntity cam,0.5,0,0
	If MouseY()<5 Then TranslateEntity cam,0,0,0.5
	If MouseY()>595 Then TranslateEntity cam,0,0,-0.5
	
	For u.unit=Each unit
		If u\sel=1 Then EntityColor u\ent,255,255,0 Else EntityColor u\ent,0,0,0
	Next
	RenderWorld
	
	If MouseDown(1)
		cx#=MouseX()
		cy#=MouseY()
		
		If ox>cx Then minx=cx:maxx=ox Else minx=ox:maxx=cx
		If oy>cy Then miny=cy:maxy=oy Else miny=oy:maxy=cy
		
		Rect minx,miny,maxx-minx,maxy-miny,0
		For u.unit=Each unit
			CameraProject(cam,EntityX(u\ent),EntityY(u\ent),EntityZ(u\ent))
			If ProjectedX()>minx And ProjectedX()<maxx And ProjectedY()>miny And ProjectedY()<maxy Then u\sel=1 Else u\sel=0
		Next
		Else
		ox#=MouseX()
		oy#=MouseY()
	EndIf
	
	Oval MouseX()-3,MouseY()-3,5,5,0
	Flip
Wend
P/S\ правильно сделал, что исправил либу на функцию, а то ты етой либой всех в заблуждение ввел.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Nex (23.10.2008), }{@KeR (19.02.2011)