Skocz do zawartości

Optymalizacja platformówki online.


Roki

Rekomendowane odpowiedzi

Mam zamiar zrobić jakąś fajną platformówkę online i tak nie wyjdzie no ale...

Jest problem, otóż nie wiem jak można zoptymalizować te grę ;/ Jak mam wysyłać pozycję, co by nie było lagów? Na pewno nie będe wysyłał pozycji co stepa, nawet jeśli gracz trzyma klawisz. Aktualnie wysyłam co 2 stepy, jednak wtedy u innego gracza postać "skacze" z miejsca na miejsce. Co myślicie o odbieraniu pozycji którą dopiero ma zająć, a klient sam sobie wyliczy jak tam może dojść? Może jakieś inne sposoby?

Odnośnik do komentarza
Udostępnij na innych stronach

Co do skakania to ja bym zrobił takie coś:

 

GML (draw)
var dir, len;

dir = point_direction( x,y, xprevious, yprevious );

len = point_distance( x,y, xprevious, yprevious );

motion_blur( len, dir );

draw_sprite_ext( sprite_index, image_index, x, y, image_xscale, image_yscale, image_angle, image_blend, image_alpha );

pobierz:

skrypt motion_blur

Odnośnik do komentarza
Udostępnij na innych stronach

A co myślisz o tym aby program sprawdzał czy klawisz jest wciśnięty czy nie, dopóki jest robi to bez końca a jak ktoś puści przestaje.

Przykład:

wciskam prawy przycisk myszy i u wszystkich pokazuje się ta informacja. (Jeżeli nadal będzie to robił żadna informacja nie będzie wysyłana bo poco skoro wiadomo co robić)

A gdy puści znowu pokazuje się u wszystkich info i przestaje to robić.

I zamiast wysyłać 1800 liczb na minutę wyślesz około 20 (przy stałej wolnej grze [trzeba tylko to jeszcze pomnożyć przez ilość klawiszy])

Odnośnik do komentarza
Udostępnij na innych stronach

Ale tak czy siak, jak klikam klawisz to wiadomość idzie co stepa, prawda?

Co do UDP -> Musi być inny port jak TCP?

 

@EDIT: Sry, źle cię zrozumiałem, pomyślę nad tym, tyle że przy tym to dopiero mogą być wahania pozycji. Jak jakiś pakiet nie dojdzie, to będzie źle, a zależy mi na w miarę dokładnych pozycjach ;/

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra, zrobię w ten sposób, co mówił bluks, tylko muszę jeszcze trochę poprawić ogólny system ruchu i się za to biorę :) Jak skończe, to napiszę jak wyszło xD

 

@EDIT: Chodzi mi o wysyłanie który klawisz kliknął :P Co to pozycja absolutna, a co to relatywna, bo nie kminię? D:

Odnośnik do komentarza
Udostępnij na innych stronach

Nie sprawdzaj, który klawisz wcisnął tylko czy wcisnął. Wtedy pozycjonuj x i y absolutnie oba naraz.

A co myślisz o tym aby program sprawdzał czy klawisz jest wciśnięty czy nie

EDIT: ale shit to i tak wyjdzie na to samo jak byś wysłyłał co stepa x i y hmm to już sam nie wiem.

Odnośnik do komentarza
Udostępnij na innych stronach

No właśnie. Aktualnie mam tak że:

GML
if xprevious != x or yprevious != y

if alarm[0]=-1

alarm[0]=2

A alarm[0] wysyła pozycję. Czyli że zostaje UDP?

 

@EDIT: E.w. mogę podzielić pakiet co wysyła X i Y, na 2 pojedyncze, jeden wysyła X, drugi Y, ale czy to coś da?

Odnośnik do komentarza
Udostępnij na innych stronach

No chyba że przesuwasz relatywnie sposobem bluksa ale co jakąś sekundę albo więcej czasu resetujesz pozycje absolutnie żeby pozbyć się przesunięcia o wektor względem cilienta a servera.

EDIT: tylko pytanie czy to będzie optymalniejsze od zwykłego x i y post #4

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...