Sutikku Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 Witam. Tworzę bardzo prostą gierkę, tylko i wyłącznie aby czasem pograć z przyjaciółmi. Wygląda to tak: Jest dwóch graczy i dość dużo bloków. Po mapie lata smok i te bloki niszczy. Trzeba jak najdłużej wytrzymać skacząc z bloku na blok. Tyle słowem wstępu. Problem polega na tym, że usuwanie bloków wygląda inaczej u hosta, a inaczej u osoby która się dołączyła. Wiem, że problem jest w tym, że po prostu jest instance_destroy() kiedy blok dotknie smoka, a nie są te informacje wysyłane przez serwer. I tu się rodzi mój problem. Jak zrobić aby każdy blok był usuwany zgodnie z hostem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 Blok niszcz u hosta, a do klientów wysyłaj informacje który to blok. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 26 Lipca 2014 Autor Udostępnij Opublikowano 26 Lipca 2014 Blok niszcz u hosta, a do klientów wysyłaj informacje który to blok. W jaki sposób wysyłać informacje który to blok? Jestem dość początkujący. Każdy blok ma własne ID? Mam je sam ustawić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Madness Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 Tak każdy blok(obiekt) ma swoje id , ale możesz też sam sobie stworzyć zmienną id i na tej podstawie wysyłać odpowiednią informacje. :) Wybór należy do ciebie, choć wydaje mi się że własny identyfikator bloku byłby lepszy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 26 Lipca 2014 Autor Udostępnij Opublikowano 26 Lipca 2014 Tak każdy blok(obiekt) ma swoje id , ale możesz też sam sobie stworzyć zmienną id i na tej podstawie wysyłać odpowiednią informacje. :) Wybór należy do ciebie, choć wydaje mi się że własny identyfikator bloku byłby lepszy. Żeby przypisać własne ID, muszę stworzyć tablice? Troszkę ogarniam C++, więc może mi się to akurat przyda. Szukam po forum, ale nie mogę znaleźć, czegoś co by mi pomogło. Mógł by mnie ktoś odesłać, do przykładu, albo napisać kod, który by takowe ID, przypisywał? Nie mam pomysłu jak by to wyglądało. edit: Chyba już wiem. Mam korzystać z instance_position ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 Najprostszy sposób to wysłać z hosta x i y bloku, a u klienta GML with(collision_point(blokx, bloky, obj_blok, false, true)) instance_destroy(); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 26 Lipca 2014 Autor Udostępnij Opublikowano 26 Lipca 2014 Dziękuje za odpowiedzi. Myślę, że będę się częściej udzielał teraz na forum. Wszystko na razie pięknie działa ;) EDIT: Czy mogę wysłać instance_id, aby potem sprawdziło czy id są takie same i usunęło blok? Bo kiedy chcę używać takiego sposobu, Game Maker przestaje odpowiadać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 To działa tylko, gdy obiekt jest nieruchomy, na serwerze pozycja danego obiektu może być inna niż u hosta. W dodatku ID obiektu na serwerze też różni się od tego u hosta. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 host = serwer te bloczki są ruchome? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 26 Lipca 2014 Autor Udostępnij Opublikowano 26 Lipca 2014 Bloczki stoją w miejscu. Tylko smok lata i je niszczy. Próbowałem tego kodu który wysłałeś i niby działa, ale nie dokładnie. Na mój prymitywny tok myślenia, host nie nadąża wysyłać informacji i tylko co któryś tam blok zostaje usunięty. Ostatecznie mogę na podstawie speed i direction starać się przewidywać gdzie zostaną zniszczone bloczki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 Może GML with(collision_point(blokx, bloky, obj_blok, true, true)) instance_destroy(); EDIT: Najlepiej wysyłaj x i y środka obiektu(jeśli origin jest ustawiony na 0;0). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 host = server argh... chodziło mi o serwer - klient : | Ja robię tak, że tworzę u klienta mapę, ktora za klucze ma ID obiektów serwera (pobiera je zawczasu, zależnie od rodzaju gry może to być na początku rozgrywki, gdy wszyscy klienci są już połączeni, albo w trakcie, kiedy klienci dopiero dołączają - to jest nieco trudniejsze), a za wartości - ID odpowiadających im obiektów klienta. Rozwala mi to wszystkie problemy z kompatybilnością - serwer wysyła ID obiektu w swojej aplikacji, a mapa klienta zwraca ID odpowiedniego obiektu w aplikacji klienta. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 26 Lipca 2014 Autor Udostępnij Opublikowano 26 Lipca 2014 Nie chciałbym zaśmiecać forum i zakładać 10 nowych wątków. Wiem, że powinienem sobie poradzić sam, ale naprawdę nie wiem jak. https://gmclan.org/up9511_12_Game.html Mam problem, ponieważ niszczą się tylko niektóre klocki. Nie wiem dlaczego tak się dzieje. Nie proszę o odwalenie całej roboty, a naprowadzenie mnie. I proszę się nie dziwić, że mam bałagan w kodach. To coś w stylu nauki na błędach ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 26 Lipca 2014 Udostępnij Opublikowano 26 Lipca 2014 GML case 3: global.iks = readshort(); with(objBlock){if(global.iks == myID)instance_destroy();} break; A w objBlock w kolizji z pileczka wywal ostatni blok kodu, step cały usuń. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 26 Lipca 2014 Autor Udostępnij Opublikowano 26 Lipca 2014 GML case 3: global.iks = readshort(); with(objBlock){if(global.iks == myID)instance_destroy();} break; A w objBlock w kolizji z pileczka wywal ostatni blok kodu, step cały usuń. Wszystko działa wyśmienicie. Czasem mi ten smok stoi w miejscu u klienta, ale to sam postaram się zlikwidować. Dziękuje za pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę