ZyperPL Opublikowano 8 Kwietnia 2012 Udostępnij Opublikowano 8 Kwietnia 2012 Cześć! Chciałem ostatnio dodać multika do mej gry. Robiłem wszystko wg. tego poradnika: https://gmclan.org/index.php?czytajart=66&strona=2 Mimo kilku literówek w poradniku udało mi się to zrobić i wszystko działa jak należy. Klient łączy się przez TCP do hosta, a potem wszystko idzie UDP. No i do tego momentu starczał mi poradnik. Jednak teraz mam taki problem. Gdy już obydwaj gracze przejdą do roomu z grą, u klienta następuje zawiecha. Host działa normalnie i można grać normalne (oczywiście bez drugiego gracza). Ale nie wiem dlaczego klient się crashuje. Może być to wina tego, że odpalam to na jednym kompie? Wersja krótka: Po połączeniu i przejściu do rooma z grą, gra klienta się zawiesza, a host może grać normalnie. W czym problem? Bardzo proszę o choćby niewielką pomoc :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 8 Kwietnia 2012 Udostępnij Opublikowano 8 Kwietnia 2012 To znaczy, że coś źle robisz. Miałem kiedyś coś podobnego, nie pamiętam dokładnie przez co. Radzę przeanalizować od początku cały kod (a najlepiej przepisać). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Finn Opublikowano 8 Kwietnia 2012 Udostępnij Opublikowano 8 Kwietnia 2012 Sprawść czy jakaś pętla się, nie zapętliła w nieskończoność. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 8 Kwietnia 2012 Autor Udostępnij Opublikowano 8 Kwietnia 2012 Dzięki Finn. Problem jest z tym: GML var size; while(true) { size = receivemessage(global.udpsock); if(size <= 0) size = receivemessage(global.otherplayer); if(size < 0) break; if(size == 0) { room_goto(start) } messageid = readbyte(); switch(messageid) { case 0: x=readshort(); y=readshort(); image_index=readshort(); break; } } Nie ma zmiennej global.udpsock. Co z tym zrobić? Serwer ma taką zmienną, a klient jak widać nie... Gdy zrobiłem if variable_global_exists("udpsock") to robiła się wyżej wymieniona zawiecha. Dlaczego nie ma tej zmiennej? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 8 Kwietnia 2012 Udostępnij Opublikowano 8 Kwietnia 2012 Zaznacz obiekt kontroler presistance. EDIT: Jak to nie pomoże to możesz mi wysłać projekt. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
asdfMaciej Opublikowano 8 Kwietnia 2012 Udostępnij Opublikowano 8 Kwietnia 2012 Jeśli dostaniesz message 0, to nie przejdziesz do następnego poziomu, ponieważ switch z <= 0 wykonuje się wcześniej niż zero. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Finn Opublikowano 8 Kwietnia 2012 Udostępnij Opublikowano 8 Kwietnia 2012 To utwórz tą zmienną, a jak nie pomorze to chyba nie scisłość GM'a, najwyżej się Gnysia spyta.:) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 8 Kwietnia 2012 Autor Udostępnij Opublikowano 8 Kwietnia 2012 Nic z tego co podaliście nie pomogło. Może coś źle robię? Btw, podaję wszystkie ważne kody: GML if point_distance(mouse_x,mouse_y,400,room_height/2)<60 && mouse_check_button(mb_left) { global.master = false; server = tcpconnect("127.0.0.1",27015,true); if(server <= 0) { room_goto(start) exit; } global.otherplayer = server; global.udp = udpconnect(27014, true); global.otherip = tcpip(server); global.otherudpport = 27016; room_goto(levelmulti); } //join button Obiekt netcontrol: CREATE: dllinit(0,1,0) DRAW (może musi być step?): if point_distance(mouse_x,mouse_y,400,room_height/2+120)<60 && mouse_check_button(mb_left) { global.master = true; // hostowanie room_goto(wait) } //host button</span> To wyżej jest od obiektu z menu, który tworzy guziki. Jak ktoś kliknie Join to się łączy i od razu jest w roomie z grą multi, a jak ktoś klika host to idzie do pokoju wait i tam czeka. Teraz w roomie wait jest obiekt "netwait": w CREATE ma on: GML listen = tcplisten(27015, 2, true); //nasłuchiwanie if(listen <= 0) //jeśli nie udaje się połączyć room_goto(start); //wraca do menu</span> STEP: GML client = tcpaccept(listen, true); //akceptowanie if(client <= 0) exit; global.udpsock = udpconnect(27016, true); global.otherplayer = client; global.otherip = lastinIP(); global.otherudpport = 27014; room_goto(levelmulti); //jesli wszystko dziala cacy no to idzie do rooma z gra multi</span> Mam nadzieje, że nic nie zgubiłem po drodze i ktoś mi jakoś pomoże (pomorze ftw!) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 8 Kwietnia 2012 Udostępnij Opublikowano 8 Kwietnia 2012 Z kodu wynika że nie ma takiej zmiennej, zamień global.udp na global.udpsock Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 9 Kwietnia 2012 Autor Udostępnij Opublikowano 9 Kwietnia 2012 Nosz racja. Tamten poradnik wypadałoby uaktualnić i ponaprawiać literówki, bo przez małe coś ludzie mają problemy potem. Oczywiście wielkie dzięki wszystkim za pomoc i Tobie Edie ;) Teraz muszę jeszcze rozkminić dlaczego host nie dostaje pakietów a klient tak o.O 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ę