forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   коллизии в дерект плей (http://forum.boolean.name/showthread.php?t=5551)

сергей 11.01.2008 11:42

коллизии в дерект плей
 
хелп почему неработает колизия ?

код:

Const GRAVITY#=-3
Const Typeplayer = 1, TypeWall = 2


;разрешение;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Graphics3D 800,600,32
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;
SetBuffer BackBuffer()
terrain=LoadMesh ("E:\AB8A~1\1570~1\-9955~1\7056~1\DATAFA~1\maps\3ADA~1.B3D")
EntityType terrain,TypeWall


svet=CreateLight ()
PositionEntity svet,0,500,0


Global camera,campitch#,camyaw#,mvx#,mvy#,mvz#
Global bot
sound=LoadSound ("E:\AB8A~1\1570~1\-9955~1\Data\mick\mw_title.mov")
PlaySound sound1



Global player=CreateSphere()
PositionEntity player,0,400,0
TurnEntity player,0,0,0
EntityRadius player, 20
EntityType player, TypePlayer



cam=CreateCamera(player)
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)

mxspd# =MouseXSpeed()*0.2
myspd#=MouseYSpeed()*0.2

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

campitch=campitch+myspd
If campitch<-180 Then campitch=-180
If campitch>180 Then campitch=180
If MouseDown (2)Then RotateEntity cam,campitch,EntityYaw(cam)-mxspd,0



If KeyDown(17) MoveEntity player, 0, 0, 15
If KeyDown(31) MoveEntity player, 0, 0, -15
If KeyDown(32) TurnEntity player, 0,-2, 0
If KeyDown(30) TurnEntity player, 0, 2, 0
TranslateEntity player,0,gravity#,0
If KeyHit (57) MoveEntity player,x,y+100,z

;ии бота:::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::

;::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::

RenderWorld
UpdateWorld
Text 10, 10, "Info: "+CName
Flip
Wend
End

HolyDel 11.01.2008 11:58

Ответ: коллизии в дерект плей
 
Цитата:

коллизии в дерект плей
при чем здесь "дерект плей" ?

во первых, сначала ставь
UpdateWorld, потом RenderWorld.

больше ошибок не нашел, скинь пример с медией - будет время посмотрю, или кто нить другой посмотрит.

сергей 11.01.2008 12:01

Type Player
Field name$,id,ent
End Type

Global cam
Global myent
Global myid
Global myname$

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
HostNetGame("World Arena")

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()
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
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
If p\id=id Then Return p
Next
End Function

Function PackMsg$(ent)
Return EntityX(ent)+"|"+EntityZ(ent)+"|"+EntityYaw(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)
yaw=Float(Left(dat$,Len(dat$)))
PositionEntity ent,x,0,z
RotateEntity ent,0,yaw,0
End Function

нето вставил тут неработает (

Tadeus 11.01.2008 12:04

Re: коллизии в дерект плей
 
Товарищи! Почему вы так бездумно копируете код из моей статьи? Он же не оптимизирован :rolleyes:

Да и копипаст - это зло ИМХО

Насчет проблемы - причина та же, что сказал ХолиДел. И вот это еще смущает:

Код:

Include "E:\AB8A~1\1570~1\-9955~1\Data\script\26C9~1.TXT"
Код:

terrain=LoadMesh ("E:\AB8A~1\1570~1\-9955~1\7056~1\DATAFA~1\maps\3ADA~1.B3D")
ЗЫЖ. ДП - ЗЛО :wild:

сергей 11.01.2008 12:06

ну а всетаки почему ?

объясни пожалуйсто как и где ((

HolyDel 11.01.2008 12:11

Ответ: коллизии в дерект плей
 
Цитата:

Товарищи! Почему вы так бездумно копируете код из моей статьи?
эй!
http://www.forum.boolean.name/showthread.php?t=2355

здесь есть сетевой шутерок с сколлизиями (в исходниках разбирайся САМ)
http://forum.boolean.name/showthread...ght=DirectPlay

Tadeus 11.01.2008 12:15

Re: Ответ: коллизии в дерект плей
 
Цитата:

Сообщение от HolyDel (Сообщение 73802)

Ты ошибсо. Таки из моей:
http://blitzetcetera.org/index.php/О...м_Direc tPlay

Сергей, ошибка там в том, что ты перед RenderWorld забыл поставить UpdateWorld. Та же ошибка и в первом примере была, о чем сообщил ХолиДел :)

HolyDel 11.01.2008 12:20

Ответ: коллизии в дерект плей
 
Tadeus, ну да. а в твоей откуда? ;)
как то загадачно использовние myid, myent. я первый начал ето использовать )) , также как кстати и FindPlayer, и Pack, UnPack message.
кстати, интересная система запаковки, распаковки сообщений. респект!

Tadeus 11.01.2008 12:45

Цитата:

Сообщение от HolyDel (Сообщение 73805)
Tadeus, ну да. а в твоей откуда? ;)
как то загадачно использовние myid, myent. я первый начал ето использовать )) , также как кстати и FindPlayer, и Pack, UnPack message.
кстати, интересная система запаковки, распаковки сообщений. респект!

Myid я действительно увидел у тебя, до myent додумалсо сам. FindPlayer, и Pack, UnPack я нашел на каком-то буржуйском сайте, а потом увидел во флайере. ФайндПлейер пишется левой ногой, а я, кстати, так и не понял принцип пакования данных во флайере, поэтому сделал свое. На буржуйском сайте тоже было что-то непонятное :-)

Ха-ха, товарисч ХолиДел. Вот они, ваши функции:
http://www.blitzbasic.com/Community/...hp?topic=62491
;)

HolyDel 11.01.2008 12:52

Ответ: коллизии в дерект плей
 
Цитата:

Ха-ха, товарисч ХолиДел. Вот они, ваши функции:
http://www.blitzbasic.com/Community/...hp?topic=62491
и правда )

сергей 11.01.2008 12:53

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
HostNetGame("World Arena")






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
If p\id=id Then Return p
Next
End Function

Function PackMsg$(ent)
Return EntityX(ent)+"|"+EntityZ(ent)+"|"+EntityYaw(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)
yaw=Float(Left(dat$,Len(dat$)))
PositionEntity ent,x,0,z
RotateEntity ent,0,yaw,0
End Function

Tadeus 11.01.2008 12:55

Re: коллизии в дерект плей
 
Код:

For p.Player=Each Player
TranslateEntity p\ent,0,gravity#,0
Next


HolyDel 11.01.2008 12:57

Ответ: коллизии в дерект плей
 
Tadeus, неа, пиши сетевой шутер!
Серег, пиши также обновление координаты Y.
Код:

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

как сделать распаковку догадайся сам, не подсказывайте ему (хотябы часок), пусть думает.

Tadeus 11.01.2008 13:00

О как
 
Цитата:

Сообщение от HolyDel
Tadeus, неа, пиши сетевой шутер!

:4to: Ты о чем?

сергей 11.01.2008 13:03

Re: коллизии в дерект плей
 
ок спасибо ша подкмаю


Часовой пояс GMT +4, время: 16:49.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot