ПроЭктировщик
Регистрация: 01.02.2011
Сообщений: 148
Написано 7 полезных сообщений (для 8 пользователей)
|
Ответ: Управление камерой:
Почуму кубик не двигается???

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
;///////// Type ///////
Type unit
Field ent,sel
End Type
Global movepiv
Global celpiv
Global cam
Global pick
;////////End Type ///////
cam=CreateCamera()
PositionEntity cam,0,60,0
RotateEntity cam,60,0,0
p=CreatePlane()
EntityColor p,0,128,0
CreatePlayer(-50,3,65)
Local ox#,oy#,cx#,cy#,tx#,ty#
While Not KeyDown(1)
Dvijenie()
If MouseX()<5 Then TranslateEntity cam,-0.5,0,0
If MouseX()>1020 Then TranslateEntity cam,0.5,0,0
If MouseY()<5 Then TranslateEntity cam,0,0,0.5
If MouseY()>766 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,120
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
End
Function CreatePlayer(x#=0,y#=0,z#=0)
u.unit=New unit
u\ent=CreateCube()
PositionEntity u\ent,x#,y#,z#
u\sel=0
movepiv=CreatePivot()
PositionEntity movepiv,x#,y#+4,z#
celpiv=CreatePivot()
PositionEntity celpiv,x#+4,y#+2,z#+4
End Function
Function Dvijenie()
pick=CameraPick(cam,MouseX(),MouseY())
For u.unit=Each unit
If u\sel=1 Then
If MouseHit(2)=1 Then
PositionEntity celpiv,PickedX#(),PickedY#()+2,PickedZ#()
EndIf
EndIf
Next
If EntityDistance(movepiv,celpiv)>3 Then
PointEntity movepiv,celpiv
MoveEntity movepiv,0,0,1
EndIf
End Function
Последний раз редактировалось }{@KeR, 19.02.2011 в 13:46.
|