Показать сообщение отдельно
Старый 08.12.2007, 12:34   #18
Strelok3848
Оператор ЭВМ
 
Регистрация: 05.12.2007
Сообщений: 26
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Помогите новечку)

Скачал уроки с блитц-скул! И у меня возник такой вопрос как сделать чтобы когда я выходил из двери была допустим улица. Вот код код комнаты
Graphics3D 640, 480
SetBuffer BackBuffer()
Dim aMap(20,20)
Dim aCube(20,20)
Const TypePlayer = 1, TypeWall = 2, TypeDoor = 3
Const HDOOR = 6, VDOOR = 7
Const OPENING = 10, OPENED = 20, CLOSING = 30, CLOSED = 40

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


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


Global Floor=LoadTexture("ground.BMP")
land=CreatePlane()
PositionEntity land,0,-1.5,0
EntityTexture land, Floor
Global Floortex=LoadTexture("floor.jpg")
Floor1=CreatePlane()
PositionEntity Floor1,0,-1.5,0
EntityTexture Floor1, floortex
Global skytex=LoadTexture("ceil.jpg")
ceiling=CreatePlane()
PositionEntity ceiling,0,1.5,0
EntityTexture ceiling, skytex
TurnEntity ceiling, 0,0,180
styl=LoadMesh( "Models\Stool02.3DS")
ScaleEntity styl,.01,.01,.01 ;-------------------------Styl
RotateEntity styl,0,0,0
PositionEntity styl ,7,-1,13
;knopka
lever=CreateCube()
ScaleEntity lever, 0.1, 0.1, 0.1
PositionEntity lever, 25, 0.2, 11
EntityPickMode lever, 2
NameEntity lever, "LEVER1"


mapSize% = 20
filein = ReadFile("level5.map")
mapLines = 1
While Not Eof(filein)
mapStr$ = ReadLine$( filein )
For i=1 To MapSize
aMap(mapLines,i) = Int( Mid(mapStr,i,1 ))
Next
mapLines = mapLines + 1
Wend
CloseFile(filein)

; Doors Info Structure
Type doorsinfo
Field ix%,iz%
Field oDoor%
Field status%
Field pos#
Field doortype% ; VDOOR, HDOOR
; Field Delay%
Field ticks#
End Type
Global ALL_DOORS = 10 ; number of doors
Dim Doors.doorsinfo( ALL_DOORS )
Global NumDoors = 0
tex = LoadTexture ("tex1.jpg")
tex2 = LoadTexture ("tex2.jpg")
tex3 = LoadTexture ("tex3.jpg")
tex4 = LoadTexture ("tex4.png",4)
tex5 = LoadTexture ("door1.jpg")
For j=1 To mapSize
For i=1 To mapSize
If aMap(j,i) <> 0
aCube(j,i)=CreateCube()
Select aMap(j,i)
Case 1
EntityTexture aCube(j,i), tex
ScaleEntity aCube(j,i),1.5,1.5,1.5
EntityType aCube(j,i), TypeWall
Case 2
EntityTexture aCube(j,i), tex2
ScaleEntity aCube(j,i),1.5,1.5,1.5
EntityType aCube(j,i), TypeWall
Case 3
EntityTexture aCube(j,i), tex3
ScaleEntity aCube(j,i),1.5,1.5,1.5
EntityType aCube(j,i), TypeWall
Case 4
EntityTexture aCube(j,i), tex4
ScaleEntity aCube(j,i),1.5,1.5,1.5
EntityType aCube(j,i), TypeWall
Case HDOOR
EntityTexture aCube(j,i), tex5
ScaleEntity aCube(j,i),1.5,1.5,0.2
EntityType aCube(j,i), TypeDoor
NumDoors = NumDoors + 1
Doors(NumDoors) = New doorsinfo
Doors(NumDoors)\oDoor = aCube(j,i)
Doors(NumDoors)\ix = i*3
Doors(NumDoors)\iz = j*3
Doors(NumDoors)\status = CLOSED
Doors(NumDoors)\pos = 0
Doors(NumDoors)\doortype = HDOOR
Case VDOOR
EntityTexture aCube(j,i), tex5
ScaleEntity aCube(j,i),0.2,1.5,1.5
EntityType aCube(j,i), TypeDoor
NumDoors = NumDoors + 1
Doors(NumDoors) = New doorsinfo
Doors(NumDoors)\oDoor = aCube(j,i)
Doors(NumDoors)\ix = i*3
Doors(NumDoors)\iz = j*3
Doors(NumDoors)\status = CLOSED
Doors(NumDoors)\pos = 0
Doors(NumDoors)\doortype = VDOOR
End Select
PositionEntity aCube(j,i), i*3, 0, j*3
EndIf
Next
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(20 MoveEntity player, 0, 0, -0.2
If KeyDown(203) TurnEntity player, 0, 2, 0
If KeyDown(205) TurnEntity player, 0, -2, 0
; otkritie dveri konokoi
If MouseHit(1)=True
ent = CameraPick(cam,MouseX(),MouseY())
If ent
If EntityDistance(ent, player) < 4.5
name$ = EntityName(ent)
If name = "LEVER1"
Doors(1)\status = openING
EndIf
EndIf
EndIf
EndIf
entitywall% = EntityCollided(Player,TypeWall)
entitydoor% = EntityCollided(Player,TypeDoor)

CollideDoors(entitydoor)
UpdateDoors
UpdateWorld
RenderWorld
Text 12,10, "Entity Wall: "+Str(entitywall)
Text 12,20, "Entity Door: "+Str(entitydoor)

Flip
Wend
End
;---------------------------
Function CollideDoors( door )
For i=1 To NumDoors
If Str(Doors(i)\oDoor) = Str(door)
; FoundDoor = Str(Doors(i)\status)
Doors(i)\status = OPENING
EndIf
Next
End Function
;---------------------------
Function UpdateDoors()
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 = VDOOR
PositionEntity Doors(i)\oDoor, Doors(i)\ix, 0, Doors(i)\iz + Doors(i)\pos
EndIf
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 = VDOOR
Doors(i)\status = CLOSING
EndIf
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 = VDOOR
PositionEntity Doors(i)\oDoor, Doors(i)\ix, 0, Doors(i)\iz + Doors(i)\pos
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

Function UpdateScene()
mXs# = MouseXSpeed()
mYs# = MouseYSpeed()
;kamera
TurnEntity sceneCamPiv,0,-(mXs#/3),0,True
TurnEntity sceneCamera,(mYs#/3),0,0
End Function
(Offline)
 
Ответить с цитированием