Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

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?

Opublikowano

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

Opublikowano

Nie chodzi mi o sam skok, chodzi mi ogólnie o całe chodzenie. Z tym skryptem co podałeś, to próbowałem coś podobnego, tylko wtedy są wahania pozycji czasem ;/ Przy 2 stepach są małe, ale przy np. 8 duże ;/ Jakieś inne sposoby?

Opublikowano

Ruch wysyłaj przez UDP nie TCP

UDP jest szybsze i może gubić pakiety ale o to się nie musisz martwić bo server i tak nie musi wiedzieć tego że zgubił pozycję ponieważ w następnej klatce gry i tak ta pozycja się zmieni.

Opublikowano

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])

Opublikowano

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 ;/

Opublikowano

Prawdopodobnie będzie tylko duży skok. Warto było by to przetestować.

edit: bo wysyłasz pozycję absolutną a nie relatywną. Jak byś wysyłał relatywnie to gracz w cliencie był by przesunięty o jakiś wektor względem servera.

Opublikowano

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:

Opublikowano

No czyli wysyłając który klawisz klika, będe wysyłał jakby pozycję relatywną, co nie? No bo jak odbierze klawisz w prawo, to go ruszy te x+=2?

Opublikowano

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.

Opublikowano

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?

Opublikowano

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

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ę...