Показать сообщение отдельно
Старый 11.01.2008, 18:27   #33
сергей
Нуждающийся
 
Регистрация: 14.10.2007
Сообщений: 65
Написано одно полезное сообщение
(для 2 участников)
Re: коллизии в дерект плей

Type Player
 Field name$,id,ent,GRAVITY#
End Type

Global cam
Global myent
Global myid
Global myname$
Global GRAVITY#=-3

Include "E:\AB8A~1\1570~1\-9955~1\Data\script\26C9~1.TXT"
SetBuffer BackBuffer()
Const Typeplayer = 1, TypeWall = 2
terrain=LoadMesh ("E:\AB8A~1\1570~1\-9955~1\7056~1\DATAFA~1\maps\3ADA~1.B3D")
EntityType terrain,TypeWall
jng=JoinNetGame("World Arena","127.0.0.1")






p.Player=New Player
p\name=Input("Enter your name:")
p\id=CreateNetPlayer(p\name)
p\ent=CreateCube()
myname=p\name
myid=p\id
myent=p\ent

EntityRadius myent, 20
EntityType myent, TypePlayer

cam=CreateCamera(myent)

PositionEntity cam, 0,5,-20 
EntityRadius cam, 10
CameraClsColor Cam,10,10,50
CameraRange cam,1,250000
Collisions Typeplayer, TypeWall, 2, 3
While Not KeyHit(1)
 UpdatePlayer()
 UpdateNetwork()
 UpdateWorld
 RenderWorld
 Flip
Wend

Function UpdatePlayer()
 If KeyDown(17) MoveEntity myent,0,0,10
 If KeyDown(31) MoveEntity myent,0,0,-10
 If KeyDown(30) TurnEntity myent,0,1,0
 If KeyDown(32) TurnEntity myent,0,-1,0
 TranslateEntity myent,0,gravity#,0
 SendNetMsg 2,PackMsg$(myent),myid,0
End Function

Function UpdateNetwork()
 While RecvNetMsg()
  Select NetMsgType()
   Case 100
    p.Player=New Player
    p\id=NetMsgFrom()
    p\name=NetPlayerName(p\id)
    p\ent=CreateCube()
   Case 101
    p.Player=FindPlayer(NetMsgFrom())
    FreeEntity p\ent
    Delete p
   Case 2
    p.Player=FindPlayer(NetMsgFrom())
    UnpackMsg(p\ent,NetMsgData$())
  End Select
 Wend
End Function

Function FindPlayer.Player( id )
 For p.Player=Each Player
TranslateEntity p\ent,0,gravity#,0
  If p\id=id Then Return p
 Next
End Function

Function PackMsg$(ent)
Return EntityX(ent)+"|"+EntityZ(ent)+"|"+EntityYaw(ent)+"|"+EntityY(ent)
End Function

Function UnpackMsg(ent,dat$)
xp=Instr(dat$,"|")
x=Float(Left(dat$,xp)) 
dat$=Right(dat$,Len(dat$)-xp)
zp=Instr(dat$,"|") 
z=Float(Left(dat$,zp))
 
dat$=Right(dat$,Len(dat$)-zp)
yawp=Instr(dat$,"|")
yaw=Float(Left(dat$,yawp)) 
dat$=Right(dat$,Len(dat$)-yawp)
y=Float(dat$) 
PositionEntity ent,x,y,z
RotateEntity ent,0,yaw,0
ScaleEntity ent,5,5,5
End Function

Последний раз редактировалось HolyDel, 11.01.2008 в 18:52.
(Offline)
 
Ответить с цитированием