Показать сообщение отдельно
Старый 11.01.2008, 18:51   #34
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: коллизии в дерект плей

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

Dim ps$(16) ; Для системы парсинга

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

const size#=10 ;Чем больше - тем больше игрок (должно быть больше нуля)

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()
scaleentity p\ent,size,size,size
myname=p\name
myid=p\id
myent=p\ent

EntityRadius myent, 20
EntityType myent, TypePlayer

cam=CreateCamera(myent)
scaleentity cam,1.0/size,1.0/size,1.0/size
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,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$)
	parse(dat)	
	PositionEntity ent,float(ps(1)),float(ps(2)),float(ps(4))
	RotateEntity ent,0,float(ps(3)),0
End Function

;Функция парсит строку
Function parse(st$)
	For i=0 To 16
		ps(i)=""
	Next
	c=1
	For i=1 To Len(st)
		If Mid(st,i,1)=":" Then c=c+1 Else ps(c)=ps(c)+Mid(st,i,1)
	Next
	Return c
End Function
попробуй так
(Offline)
 
Ответить с цитированием