Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2018-03-25, 22:40


Lucenzo







Wiek: 33
Na forum: 3010 dni
Posty: 31
Nick w MP: Kotuń

Piwa: 2

Respekt: 50

Ostrzeżeń: 100%
mam pytanko czy op?aca sie licznik robic w onplayerupdate czy lepiej stworzyc timer co iles tam ms? a jak timer to co ile msnajoptymalniej i najp?ynniej pokazuje ?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-03-26, 09:01


Virex_PL

Głos rozsądku






Wiek: 26
Na forum: 4187 dni
Posty: 170
Nick w MP: Virex_PL

Piwa: 31

Respekt: 120
Respekt: 120

W zasadzie to w OPU nie robi si? nic (opr?cz ma?ych kod?w) poniewa? przy wi?kszej ilo?ci
graczy nieoptymalny kod m?g?by zawiesi? serwer. http://wiki.sa-mp.com/wiki/OnPlayerUpdate
(Czerwona ramka). Timer co 1 sek do 2 sek by?by optymalniejszy gdyby te? doda? do niego warunek, tablice ?e gracz jest w poje?dzie i jest kierowc? by niepotrzebnie nie wykonywa? kodu tego licznika. W skr?cie (OnPlayerStateChange + tablica bool +timer 1 - 2sek).

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-03-26, 10:20


Lucenzo







Wiek: 33
Na forum: 3010 dni
Posty: 31
Nick w MP: Kotuń

Piwa: 2

Respekt: 50

Ostrzeżeń: 100%
Hmm co sekund? jest bardzo nieczytelny bo pokazuje 40 i za sekund? dopiero 90 pytam co ile M? zrobi? lepiej co 200 czy 400?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-03-26, 15:30


Combacior







Wiek: 29
Na forum: 5796 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Nie dostaniesz odpowiedzi na to pytanie, bo na to nie ma rozwi?zania. Masz wyb?r:

1. Nieoptymalne rozwi?zanie - p?ynny licznik i timer co 100ms (jeszcze p?ynniej b?dzie w OPU, bez przesady, ?e licznik mo?e zawiesi? serwer xD),
2. Optymalne rozwi?zanie - niep?ynny licznik i timer co 1000ms.

Jakie rozwi?zanie polecam? Licznik to tylko g?upi dodatek, jad?c jakimkolwiek pojazdem w og?le si? na niego nie patrzysz, tylko patrzysz na drog?, wi?c bez sensu b?dzie robi? p?ynny licznik.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-03-26, 16:05


Lucenzo







Wiek: 33
Na forum: 3010 dni
Posty: 31
Nick w MP: Kotuń

Piwa: 2

Respekt: 50

Ostrzeżeń: 100%
Hmm czyli jak dam co 500ms to te niebedzie lipy z optymalnoscia od gfluppieggoi licznika optymalnosc si? nie zepsuje

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-03-26, 16:11


Virex_PL

Głos rozsądku






Wiek: 26
Na forum: 4187 dni
Posty: 170
Nick w MP: Virex_PL

Piwa: 31

Respekt: 120
Respekt: 120

Nie napisa?em ?e licznik m?g?by zawiesi? serwer ale kod og?lny tam umieszczony. :X

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-03-26, 19:08


silentus

#define true false






Wiek: 30
Na forum: 5282 dni
Posty: 71
Nick w MP: .silent

Piwa: 1462

Respekt: 116,1
Respekt: 116,1

Ja mam spraw? rozwi?zan? tak, ?e mam licznik driftu i pr?dko?ci po??czony razem ze sob? (jako ?e oba korzystaj? z pr?dko?ci - wi?c ograniczamy zb?dne wywo?ania funkcji).

Licznik jest zoptymalizowany jak si? tylko da?o (no mo?e nie a? tak strasznie bo czasem wole czytelno?? ni? super mega optymalizejszyn), jakie? customowe funkcje od oblicze? k?t?w, pr?dko?ci itp s? przeniesione prosto do niego ?eby nie wywo?ywa? zb?dnych funkcji itd.
Sam licznik wywo?ywany jest w OnPlayerUpdate, ale nie w zwyk?y spos?b. Licznik sam reguluje sw?j interwa? w zale?no?ci od potrzeb. Gdy gracz driftuje, ogranicznik czasowy zmniejsza si? do ~190ms, natomiast im mniej p?ynno?ci potrzeba tym czas jest wi?kszy (do 500ms i wi?cej)

Wygl?da to mniej wi?cej tak:
Kod:


_gettickcount = GetTickCount(); // _gettickcount jest globalne, poza funkcj? (najszybsza mo?liwa opcja)
if(_state == PLAYER_STATE_DRIVER && _gettickcount >= pData[playerid][driftNextUpdateTick])
{
pData[playerid][driftNextUpdateTick] = _gettickcount + DriftCounter_OPU(playerid, _opu_vehid, _gettickcount);
}


funkcja DriftCounter_OPU() zwraca op??nienie kt?re sobie wybra?a (np. 300), przy okazji zamiast kolejny raz wywo?ywa? np, GetPlayerVehicleID w funkcji, przekazuje je jako argument poniewa? i tak wcze?niej gdzie? tych zmiennych u?ywam (np. do sprawdzania zmian pojazd?w przez gracza)

Plusy tego rozwi?zania:
+ Licznik jest p?ynniejszy ni? w przypadku zwyk?ego timera, kt?ry ma ustalony na sztywno interwa? i nawet gdy gracz wykonuje jak?? akcj? timer dalej b?dzie wykonywa? si? z okre?lonym odst?pem czasu. Tutaj gdy chcemy mo?emy doda? troch? "gazu" ?eby uzyska? lepsz? p?ynno?? lub zwolni? je?li nie dzieje si? nic ciekawego.
+ Licznik operuje na ?wie?ych danych od razu po aktualizacji wys?anej przez gracza
+ Licznik w pewnym sensie dostosowuje si? do pingu gracza (bo OPU wykonywane jest gdy gracz wysy?a aktualizacje, a gdy ich nie wysy?a nie wykonuje si? w og?le - wi?c nie ma ?adnego obci??enia serwera (w odr??nieniu od timera kt?ry wykonuje si? ci?gle)
+ Dzi?ki r??nych odst?pach czasowych + pingowi, wykonywanie oblicze? roz?o?one jest w losowych odst?pach czasowych, co rozk?ada ca?? prac?. W przypadku timer?w cz?sto robimy jeden timer kt?ry ma p?tle na wszystkich graczy - wtedy wykonujemy taki kod np 50 krotnie, dlatego w?tek serwera zatrzymany jest 50 krotnie d?u?ej i inny kod nie mo?e si? wykona? ;)

Podpis


Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Virex_PL
Tagi: licznik
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku