Показать сообщение отдельно
Старый 27.02.2012, 23:41   #12
L-ee-X
Разработчик
 
Аватар для L-ee-X
 
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 543
Написано 133 полезных сообщений
(для 220 пользователей)
Ответ: Дубликаты дверей

Ни все так просто как бы тебе казалось!
Вот те код, правда не мой, я тебе его подредактировал, чтоб ты смог разобраться! Но без коментов, думаю так поймешь!
Graphics3D 640, 480,32,2
SetBuffer BackBuffer
()
Dim aCube(20)

Const 
TypePlayer = 1, TypeDoor = 3
Const HDOOR = 6
Const OPENING = 10, OPENED  = 20, CLOSING = 30, CLOSED  = 40


Global player=CreateSphere()
PositionEntity player,6, 0.4, -15
ScaleEntity player
,0.1,0.1,0.1
TurnEntity player
,0,0,0
EntityType player
, TypePlayer

cam
=CreateCamera(player)
light=CreateLight(1)

Global 
Floortex=LoadTexture("floor.jpg")
Floor1=CreatePlane()
PositionEntity Floor1,0,-1.5,0
EntityTexture Floor1
, floortex

Type doorsinfo
    Field ix
%,iz%
    
Field oDoor%
    
Field status%
    
Field pos#
    
Field doortype%
    
Field ticks#
End Type

Dim Doors
.doorsinfo( 50 )
Global 
NumDoors = 0

tex5 
= LoadTexture ("door1.jpg")

For 
i=1 To 5
      aCube
(i)=CreateCube()
              
EntityTexture aCube(i), tex5
              ScaleEntity aCube
(i),1.5,1.5,0.2
              EntityType aCube
(i), TypeDoor
              NumDoors 
= NumDoors + 1
              Doors
(NumDoors) = New doorsinfo
              Doors
(NumDoors)\oDoor = aCube(i)
              
Doors(NumDoors)\ix = i*8
              Doors
(NumDoors)\iz = j*3
              Doors
(NumDoors)\status = CLOSED 
              Doors
(NumDoors)\pos = 0
              Doors
(NumDoors)\doortype = HDOOR
   PositionEntity aCube
(i), i*8, 0, j*3
Next


Collisions TypePlayer
, TypeWall, 2, 3
Collisions TypePlayer
, TypeDoor, 2, 3


While Not KeyDown( 1 )

If 
KeyDown(200) MoveEntity player, 0, 0, 0.2
If KeyDown(208) MoveEntity player, 0, 0, -0.2
If KeyDown(203) TurnEntity player, 0, 2, 0
If KeyDown(205) TurnEntity player, 0, -2, 0
entitywall
% = EntityCollided(Player,TypeWall) 
entitydoor% = EntityCollided(Player,TypeDoor)


CollideDoors(entitydoor)

   
UpdateWorld
   RenderWorld
   Flip
Wend

End

Function CollideDoors( door )
   For 
i=1 To NumDoors
       
If Str(Doors(i)\oDoor) = Str(door)
          
Doors(i)\status = OPENING 
       
EndIf 
   
Next

If current + time_delay < MilliSecs()
For 
i=1 To NumDoors 
    
If Doors(i)\status = OPENING 
       Doors
(i)\pos = Doors(i)\pos + 0.1
       
If Doors(i)\doortype = HDOOR
         PositionEntity Doors
(i)\oDoor, Doors(i)\ix + Doors(i)\pos, 0, Doors(i)\iz
       
EndIf

       If 
Doors(i)\pos > 2.8 
          Doors
(i)\pos = 2.8
          Doors
(i)\status = OPENED
          Doors
(i)\ticks = MilliSecs()+3000
       
EndIf
    EndIf

    If 
Doors(i)\ticks < MilliSecs() And Doors(i)\status = OPENED Then
        
If Doors(i)\doortype = HDOOR 
          Doors
(i)\status = CLOSING
        
EndIf
    EndIf

    If 
Doors(i)\status = CLOSING 
       Doors
(i)\pos = Doors(i)\pos - 0.1
       
If Doors(i)\pos < 0 
          Doors
(i)\pos = 0
          Doors
(i)\status = CLOSED
       
EndIf
       If 
Doors(i)\doortype = HDOOR
          PositionEntity Doors
(i)\oDoor, Doors(i)\ix + Doors(i)\pos, 0, Doors(i)\iz
       
EndIf
    EndIf
Next
EndIf
current = MilliSecs()   
End Function 
Media свою вставь...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (28.02.2012)