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

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

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


Global player=CreateSphere()
PositionEntity player,60.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
.doorsinfo50 )
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*80j*3
Next


Collisions TypePlayer
TypeWall23
Collisions TypePlayer
TypeDoor23


While Not KeyDown)

If 
KeyDown(200MoveEntity player000.2
If KeyDown(208MoveEntity player00, -0.2
If KeyDown(203TurnEntity player020
If KeyDown(205TurnEntity player0, -20
entitywall
% = EntityCollided(Player,TypeWall
entitydoor% = EntityCollided(Player,TypeDoor)


CollideDoors(entitydoor)

   
UpdateWorld
   RenderWorld
   Flip
Wend

End

Function CollideDoorsdoor )
   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)\oDoorDoors(i)\ix Doors(i)\pos0Doors(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 
          Doors
(i)\pos 0
          Doors
(i)\status CLOSED
       
EndIf
       If 
Doors(i)\doortype HDOOR
          PositionEntity Doors
(i)\oDoorDoors(i)\ix Doors(i)\pos0Doors(i)\iz
       
EndIf
    EndIf
Next
EndIf
current MilliSecs()   
End Function 
Media свою вставь...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (28.02.2012)