Показать сообщение отдельно
Старый 17.02.2011, 20:33   #4
}{@KeR
ПроЭктировщик
 
Регистрация: 01.02.2011
Сообщений: 148
Написано 7 полезных сообщений
(для 8 пользователей)
Ответ: Управление камерой:

Вот сделал что объект выделяется рамкой и куда нажмёшь(ПКМ) туда и двигается.....если (ЛКМ) то сбрасывается
но всёравно как-то коряво.....помогите пожалуйста
Например если рамка проходит центр куба то он всёравно выделяется


Graphics3D 1024,768,32,2


CreateWorld
()

Global 
movepiv
Global centpiv
Global campiv
Global camera
Global mic
Global speed#
Global deltaT
Global userTime
Global newTime
Global wLog

Global f_key=17
Global b_key=31
Global l_key=30
Global r_key=32

Global CubSelect 
Global Ramkax1Ramkay1,Ramkax2Ramkay2

Const  playertype=1,poltype=2

CreatePlayer
(600,3,-600)

cub=CreateCube()
ScaleEntity cub,2,4,2
;CameraProject(camera,EntityX(cub),EntityY(cub),EntityZ(cub))



Repeat

        dvigok
()
        
        
PositionEntity cub,EntityX#(movepiv,1),EntityY#(movepiv,1),EntityZ#(movepiv,1)
        
RotateEntity cub,0,EntityYaw(movepiv,1),0
         
        
;mouselook(camera)               
        
UpdateWorld()
        
RenderWorld()
        
Ramka()
        
Flip()
        
Until KeyHit(1)=1
End

Function CreateWorld()
        
wtex=CreateTexture(256,256)
        
SetBuffer TextureBuffer(wtex)
        
Color 10,100,10
        Rect  15
,15,226,226
        SetBuffer BackBuffer
()
        
ScaleTexture wtex,10,10
        plane
=CreatePlane()
        
EntityTexture plane,wtex
        EntityType plane
,poltype
        EntityPickMode plane
,2,1
        FreeTexture wtex
End 
Function

Function 
CreatePlayer(x#=0,y#=0,z#=0)
        
movepiv=CreatePivot() 
        
PositionEntity movepiv,x#,y#+4,z# 
        
EntityRadius movepiv,3,4.5 
        EntityType movepiv
,playertype 
        centpiv
=CreatePivot() 
        
PositionEntity centpiv,x#+4,y#+2,z#+4  
        
camera=CreateCamera() 
        
PositionEntity camera,600,100,-670 
        TurnEntity camera
,45,0,0,
        CameraClsColor camera
,10,10,150 
        mic
=CreateListener(camera,0.05,0.05,0.08
        
Collisions playertype,poltype,2,
End 
Function

Function 
dvigok()
        ;
PositionEntity campiv,EntityX#(movepiv,1),EntityY#(movepiv,1),EntityZ#(movepiv,1) 
        
If KeyHit(60Then wLog=Not wLog Wireframe wLog 
        
If userTime=0 userTime=MilliSecs() 
        
newTime=MilliSecs()  
        
deltaT=newTime-userTime 
        userTime
=newTime 
        speed
#=0.04*deltaT
 
        
If KeyDown(f_keyThen 
                TranslateEntity camera
,0,0,speed
        
Else 
                If 
KeyDown(b_keyThen TranslateEntity camera,0,0,-speed#
        
EndIf 
        If 
KeyDown(l_keyThen 
                TranslateEntity camera
,-speed#,0,0 
        
Else
                If 
KeyDown(r_keyThen TranslateEntity camera,speed#,0,0 
        
EndIf
  
         
        
CameraPick camera,MouseX(),MouseY() 
        
                ;If 
MouseHit(2)=1 Then 
                
;        PositionEntity centpiv,PickedX#(),PickedY#()+2,PickedZ#()  
                
;EndIf 
        
        If 
EntityDistance(movepiv,centpiv)>3 Then 
                PointEntity movepiv
,centpiv 
                MoveEntity movepiv
,0,0,speed
        
EndIf 
        
TranslateEntity movepiv,0,-1,
End 
Function

Function 
Ramka() 
    If 
MouseHit(1Then  
        Ramkax1
=MouseX() 
        
Ramkay1=MouseY() 
    EndIf  
    If 
MouseDown(1Then 
        Color 0
,200,
        Ramkax2
=MouseX() 
        
Ramkay2=MouseY() 
        
Line Ramkax1,Ramkay1,Ramkax2,Ramkay1 
        Line Ramkax1
,Ramkay2,Ramkax2,Ramkay2 
        Line Ramkax1
,Ramkay1,Ramkax1,Ramkay2 
        Line Ramkax2
,Ramkay1,Ramkax2,Ramkay2 
          
        
If Ramkax1>Ramkax2 Then  
            Ram1x
=Ramkax1 
            Ram2x
=Ramkax2 
        
Else 
            
Ram1x=Ramkax2 
            Ram2x
=Ramkax1 
        
EndIf 
         
        If 
Ramkay1>Ramkay2 Then  
            Ram1y
=Ramkay1 
            Ram2y
=Ramkay2 
        
Else 
            
Ram1y=Ramkay2 
            Ram2y
=Ramkay1 
        
EndIf  
         
        If (
GraphicsWidth()*0.5<Ram1x And GraphicsWidth()/0.5>Ram2x)
           ; 
EntityAlpha cub,1
            CubSelect
=True 
        
Else 
           ; 
EntityColor cub,255,255,255 
            CubSelect
=False 
        
EndIf 
    Else 
        
Ramkax1=MouseX() 
        
Ramkay1=MouseY() 
         
        If 
CubSelect=True 
            
;EntityColor cub,255,100,100 
       
Else 
            ;
EntityColor cub,255,255,255
        
EndIf 
    EndIf
        
        If 
CubSelect=True Then 
           
If MouseHit(2)=1 Then 
                PositionEntity centpiv
,PickedX#(),PickedY#()+2,PickedZ#()  
           
EndIf 
        EndIf                   
End Function 
Ещё вот: (Что не так?)
If MouseZSpeed()=1 Then
MoveEntity camera
,0,0,3
ElseIf MouseZSpeed()=-1 Then
MoveEntity camera
,0,0,-3
EndIf 

Последний раз редактировалось }{@KeR, 18.02.2011 в 12:50.
(Offline)
 
Ответить с цитированием