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=4237)

Данил 23.08.2007 19:43

Проблема аццкого мегапроЭкта ...
 
Вот тут создаю аццкий мегапроэкт.. ну типо онлайн рпг..

Так.. уже есть меню и перемещение по карте. Но вот проблема в том, что если кто-нибудь подключается, сразу появляются УЖАСНЫе тормоза и лаги... В чём может быть проблема, кроме моих кривых рук ?

Вот в общем функция обновления игрока:

Код:

Function Updateplayer ( p.Player , m$)
If  m = myid Then
PositionEntity camera , EntityX (p\Model) , EntityY (p\Model)+30 , EntityZ (p\Model) - 25 ;Камера над игроком

TranslateEntity p\Model , 0 , -1 , 0 ;гравитация нах
PointEntity p\Model , Cursor ;поворачиваем объект к курсору
RotateEntity p\Model , 0 , EntityYaw (p\Model) , 0 ;типо чтоюы игрока не вертело


SendNetMsg 2,PackMsg$(myent),myid,0

End If


End Function

И две функции для инета...

Код:

Function PackMsg$(ent)
 Return EntityX(ent)+"|"+EntityY(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)
 yp=Instr(dat$,"|")
 y=Float(Left(dat$,yp))
 dat$=Right(dat$,Len(dat$)-yp)
 zp=Instr(dat$,"|")
 z=Float(Left(dat$,zp))
 dat$=Right(dat$,Len(dat$)-zp)
 yaw=Float(Left(dat$,Len(dat$)))
 PositionEntity ent,x,y,z
 RotateEntity ent,0,yaw,0
End Function

:wallbash:

Кстати, могу дать исходники...

moka 23.08.2007 20:01

Re: Проблема аццкого мегапроЭкта ...
 
Проверь в каком именно учаске лаги, просто сделай перед операцией Time=Millisecs()
и после операции
TotTime=Millisecs()-Time
Узнаешь затраченное врмя на опр участок кода. Так определи место лагов. Потом уже детально форсируй - читай.

Данил 23.08.2007 20:15

Re: Проблема аццкого мегапроЭкта ...
 
хм.... жрёт сильно фпс функция Updateplayer ... после доключения кого либо ужассно тормозит..

Данил 23.08.2007 22:31

Re: Проблема аццкого мегапроЭкта ...
 
выяснил.. аццкие глюки из-за SendNetMsg 2,PackMsg$(myent),myid,0 ... блин, кто знает , что делать? мона , конечно, сделать, чтобы эта фунция а раз в секунду выполнялась, но всё таки как-нибудь по другому можно?

impersonalis 23.08.2007 22:58

Re: Проблема аццкого мегапроЭкта ...
 
Я вызываю апдейт сети с фиксированной частотой,а не каждую итерацию.

Данил 23.08.2007 23:18

Re: Проблема аццкого мегапроЭкта ...
 
хы, то есть , отправляем данные один раз в секунду? а не будет как бы такие задержки?

impersonalis 23.08.2007 23:28

Re: Проблема аццкого мегапроЭкта ...
 
откалибруй, ну 10мс, например

Raiter 23.08.2007 23:37

Re: Проблема аццкого мегапроЭкта ...
 
Моё скромное имхо:

1) Блицевкий ДП не пригоден для создания ММОРПГ
2) Знаний у тебя совершенно не достаточно. Вижу ты прочитал статью Тадеуса и решил что уже сможеш создать Онлайн игру? Заблуждаешся! И еще я вижу что ты тупо копипастиш код из статьи. ИМХО в суть ты даже не вьехал!

Данил 24.08.2007 00:08

Re: Проблема аццкого мегапроЭкта ...
 
1. Для мморпг может и нет, но для простенькой рпг у думаю пригоден
2. В принципе вьехал, но всё таки немного не понятно
3. Поставил таймер , но всё равно тормоза.

Данил 24.08.2007 00:42

Re: Проблема аццкого мегапроЭкта ...
 
по ходу дела прошу простить, ибо ступил сильно.. ставли таймер на отправку сообщений, а на считывание забыл.. :@

Спустя 2 часа.. Ы

Ввёл я таймер. Работает , допустим, норм, а когда таймер заканчивается, то небольшой тормоз. ну, типо , обменивается данными...

Спустя 12 часов. Ы

норм работает, но хотя бы когда ОДИН раз выполняешь функцию передачи данных, это ужас.. Тормоз на 0,5 секунты появляется...

tormoz 24.08.2007 16:38

Re: Проблема аццкого мегапроЭкта ...
 
никогда не передавай строки (только когда нуно передать имя игрока или текст)
Передавай байты и будет тебе счастье (но РПГ все равно не выйдет :) )

MiXaeL 24.08.2007 21:47

Re: Проблема аццкого мегапроЭкта ...
 
tormoz +1
Цитата:

Сообщение от tormoz
Передавай байты и будет тебе счастье (но РПГ все равно не выйдет :) )


Данил 24.08.2007 23:48

Re: Проблема аццкого мегапроЭкта ...
 
данных не так уж и много передаётся... я пробовал в 15 раз больше - тормозов больше не стало... :''((

а вот выйдет у меня рпг или нет, ужо моё дело. Возможно я плюну на инет и сделаю обычною рпгшу..:-)

Jet 25.08.2007 12:46

Re: Проблема аццкого мегапроЭкта ...
 
приведи код функции SendNetMessage

jimon 25.08.2007 13:47

Re: Проблема аццкого мегапроЭкта ...
 
Jet

Цитата:

SendNetMsg type,data$,from,to,reliable
Parameters
type = value 1-99
data$ = string containing message to send
from = player ID of the sender
to = player ID of the recipient (0=broadcast)
reliable = flag for sending message reliably

Description
First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk).

This is probably the most complicated of the networking commands. This what you use to actually send a message to one or all of the players on the network game. The other players will use RecvNetMsg() to intercept your message.
The TYPE parameter is a number from 1 to 99. These values are denoted as 'user messages'.

The Data$ parameter is the actual string that contains the message you want to send. Helpful to know that in order to keep traffic low, you will want to combine details of a message into a single message instead of sending multiple messages with a single element. For example, you might want to send X, Y, and FRAME in a single string like "200,100,4" and parse it out at the recipient's end.

FROM is the player's ID that is sending the message. This is the value returned from the CreateNetPlayer() command.

TO is the player's ID you wish to send the message to. A default value of 0 will broadcast to ALL players.

The RELIABLE flag will put a priority on the message and it will ensure there is no packet loss in the delivery. However, it is at least 3 times slower than a regular non-reliable message.

The example requires that you run it on the local machine while the remote computer runs the example in the RecvNetMsg() command.
:)


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

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