Skocz do zawartości

Gra przez Internet


Rekomendowane odpowiedzi

  • Filar Społeczności

Ano nie będzie miał tego samego id. Ale jeśli obiekty w stylu goomba nie będą tworzone w czasie gry tylko rozlokujesz je w roomie to będą miały to samo id. Inaczej trzeba by było zrobić coś takiego, że wysyłasz komendę tworzenia goombasa i sam tworzysz jakiś unikalny numerek, który posłuży do identyfikacji na drugim kompie.

Odnośnik do komentarza
Udostępnij na innych stronach

do tego uzywa sie tak zwanych dummy, generalnie w mmorpgach.

Jest obiekt ktory ma tak jakby symulowac innego gracza, gdy doalcza nowy grasz to ten obiekt zostaje tworzony i w stepie sobie odczytuje pozycje non stop. Dummy ma przypisane id gracza lub jego name i odbiera wiadomosci tylko od tego konkretnego gracza.

Nie wiem jak ma wygladac Twoja gra, jezeli ma byc rozna ilsoc graczy, np od 2 do 10. TO radze uzywac tego sposobu, jesli tylko dwoch to lepiej zrob to tak jak jest w przykladzie na gamemaker.nl

Odnośnik do komentarza
Udostępnij na innych stronach

jesli masz przeszkadzajki to zrob tak, aby if host=1, czyli server, wysylal informacje o polozeniu kazdej z nich. Problemem jest to, ze wszystkie one sie tworza praktycznie jednoczesnie na poczatku gry, jesli ich ilosc jest stała to wteyd nie ma problemu bo i host i klient mają takie same id dla kazdego obiektu, ale jak sadze w Twojej grze sa przeszkadzajki ktore czyms strzelają, a to są dodatkowe obiekty ktore rowniez musza byc brane pod uwage. Wtedy jest b. proawdopodobne, ze id sie zgadzac nie beda.

Jak to zrobic: kazdemu rodzajowi przeszkadzajki dajesz w event create wyslanie message do klienta. Message ten musi zawierac 5 wartosci: x, y, id, object_index i image_single, Jako, ze normalnie jedna wiadomoscia mozesz wyslac jedna wartosc to proponowalbym uzycia kompresji o ktorej juz moiwlem, ale jesli nie chcesz to musisz wyslac 5 wiadomosci pod rzad. Nadajesz tym wiadomosciom dajmy na to id 1, ktore bedzie oznaczalo, iz powstal nowy object. Klient musi miec obj ktory ma w stepie ustawione sprawdzanie nowych wiadomosci i jesli wiadomosc ma id=1 to znaczy ze powstal obj. Wtedy taki klient zaleznie od tego czy wysylasz 5 wiadomosci pod rzad czy skompresowales odbiera wszystkie te 5 wartosci, nastepnie idd=instance_create(x z wiadomosci,y z wiadomosci,object_index ktory pobrales z wiaodmosci), potem

idd.image_single=image_single ten ktory pobrales;

idd.idd=id ktory pobrales;

 

I w tej chwili masz stworzony object w tym miejscu w ktorym stworzyl sie na serverze, masz rowniez id tego objectu.

Trzeba zaznaczyc, ze akcja w CREATE z wysylaniem wiadomosci zachodzi tylko wtedy if host=1

Skoro mamy juz stworozny obiekt to teraz trzeba ciagle odczytywac jego polozenie. Takze dla tego obiektu w akcji STEP

if host=1

najpierw wysyla wiadomosc z id obiektu (dajmy na to, ze ten message bedzie mial id=2) do klienta a nastepnie

wysyla wiadomosci z 3 wartosciami: x,y i image_single.

teraz akacja dla obiektu ktory bedzie u klienta

if host=0

odbiera pierwsza wiadomosc, sprawdza czy id wiadomosci=2 jesli tak to jesli mplay_message_value=idd

oznacza, ze jest to wiadomosc od naszego obiektu i wtedy odbieramy dalsze wiadomosci. Wiadomosci ktore odbierzemy czyli x, y i image_single oczywiscie od razu aktualizujemy i obiekt ma dzieki temu nowe polozenie i aktualny sprite. I tak w kolko obiekt u hosta bedzie wysylal swoje dane a obiekt u klienta ciagle odczytywal. W ten sposob kazdy zrobisz z kazdym obiektem. CZyli:

 

w akcji CREATE

if host=1

wysylasz 5 wartosci: x,y, id, image_single i object_index.

 

w akcji STEP

if host=1

wysylasz id a nastepnie 3 wartosci: x,y, image_single

if host=0

odczytujesz pierwsza wiadomosc, sprawdzasz id wiadomosci, jesli id=2 to odczytujesz value i sprawdzasz czy pasuje do twojego idd, jesli tak to odczytujesz reszte wartosci i apdejtujesz.

 

: D

Odnośnik do komentarza
Udostępnij na innych stronach

Ja tu widziałem tylko jeden przykład który totalnie wymiękał jeśli w czsie gry były jakies nowe obiekty! I zdecydowanie bardziej wole to co powiedział Quetzacotl za 1000 innych przykładów :D DZIĘKI Quetzacotl własnie o takie tłumaczenie mi chodziło :D zeby powiedzieć po polsku a ja już se to na kod przetłumacze :D

PS: Quetzacotl Ja mam GM6.0 wiec mam używać image_single czy raczej image_index i sprite_index??

 

PS2: Ten odbieracz ktory ma tworzyc obiekty to ma miec tak:

mplay_player_find będzie mi nadawało nr gracza za kazdym nowym podłaczeniem czyli ten kto zalozy bedzie mial jeden a ten kto dolaczy bedzie mial 2.

przypisze im numerki pod zmienna global.player=1 - host a ten kto dolaczy bedzie mial global.player=2.

 

if global.player=2
{
mplay_message_recive(1)
...
}

 

i tu zastosuje to co mi pokazał Tymon tam wczesniej tak? :D

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli jest max dwoch gracyz to nie uzywasz zadnych player find, po prostu w miejscu gdzie bedzie mplay_create_session dasz, global.player=1; a tam gdzie sie dolacza czyli mplay_join_session bedzie global.player=2;, jesli chcialbys wiecej playerow to musialbys zrobic wlasny system identyfikacji kazdego nowego playera. Tzn taka petla ktora by wyszukiwala najmniejszy wolny id i nadawala go graczowi.

I pamietaj, ze na mapie gracza ktory dolaczal nie ma byc zadnych obiektow ustawionych na poczatku, bo one beda sie tworzyc dopiero jak powstana na serverze, zgodnie z funkcja.

Aha jeszcze jest taka sprawa, ze klient musi ciagle wysylac polozenie swojej postaci do servera a server ja odczytywac.

Co do image_single, ja mam GM6.1 i działa image_single jak i zarowno image_index.

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