Skocz do zawartości
  • Ogłoszenia

    • Uzjel

      GMClan wrócił!   12.08.2017

      GMClan.org już działa, więc jeżeli ktoś wchodził przez adres forum.gmclan.org to może już wrócić do starych zwyczajów. Jeżeli strona wam się nie wyświetla to wyczyście cache i ciasteczka.
    • gnysek

      Świętujemy urodziny GMCLANu ?   16.08.2017

      Wypowiedzcie się! http://forum.gmclan.org/index.php?/topic/34002-15-lat-gmclanu-świętujemy  

oLuju

Użytkownicy
  • Zawartość

    33
  • Rejestracja

  • Ostatnia wizyta

Reputacja

0 Neutralny

O oLuju

  • Tytuł
    Chicken
  • Urodziny 13.07.1999

Profile Fields

  • Płeć
    Male
  1. OK udało mi się wszystko w miarę naprawić. Gdy gracze Teamu 1 strzelają to pociski pojawiają się normalnie. Jednak teraz jest inny problem, bo strzelanie nie działa w Teamie 2: Pocisk u gracza strzelającego (z teamu 2) pojawia się normalnie, za to u innych nie ma po nim śladu. Kod strzelania dla gracza 1 z teamu 1: GML //===================JESLI JESTEM KIMS INNYM========================== while mplay_message_receive(0) { if mplay_message_id() == 100 and mplay_message_value() == 1 { mplay_message_send(0, 100, 0); instance_create(self.x, self.y, obj_pocisk1_team1); } } //=====================JESLI NIM JESTEM============================== if mouse_check_button(mb_left) { if przeladuj=0 { if magazynek>0 { if strzelac=1 { strzelac=0 instance_create(self.x, self.y, obj_pocisk1_team1) mplay_message_send(0, 100, 1); mplay_data_write(4,obj_pocisk1_team1.x); mplay_data_write(5,obj_pocisk1_team1.y); magazynek-=1 alarm[1]=20 } } } } Kod strzelania dla gracza 1 z teamu 2: GML //===================JESLI JESTEM KIMS INNYM========================== while mplay_message_receive(0) { if mplay_message_id() == 103 and mplay_message_value() == 1 { mplay_message_send(0, 103, 0); instance_create(self.x, self.y, obj_pocisk1_team2); } } //=====================JESLI NIM JESTEM============================== if mouse_check_button(mb_left) { if przeladuj=0 { if magazynek>0 { if strzelac=1 { strzelac=0 instance_create(self.x, self.y, obj_pocisk1_team2) mplay_message_send(0, 103, 1); mplay_data_write(22,obj_pocisk1_team2.x); mplay_data_write(23,obj_pocisk1_team2.y); magazynek-=1 alarm[1]=50 } } } } Przewertowałem cały kod i wszytko jest dokładnie tak samo u każdego gracza, wszystkie ID się zgadzają. Chce dokończyć ten projekt do końca i tyle (nie lubię porzucać niedokończonych projektów). Zacząłem już szukać GM'a Studio. Więc prawdopodobnie niedługo się na niego przeniosę. I am Lord - Jeśli faktycznie mój post umrze bo NIKT tego nie pamięta to dam se spokój <_<
  2. Odbiorca dostaje wiadomość o stworzeniu pocisku i tworzy go u siebie. Wydaje mi się że korekcja nie istnieje, bo jeśli pocisk zostanie utworzony u wszystkich graczy w tej samej pozycji, nada mu sie kieeunek i szybkość to dalej już poleci tak samo u wszystkich. Manual, który czytałem opisywał używanie mplay'a na przykładzie ponga. Piłka w tej grze nie dostaje caly czas informacji o jej pozycji bo przez zgubione pakiety (bądź opóźnione) teleportowała by się, dlatego wszystkie dane (pozycja, szybkosc, kierunek) wysyłane są tylko gdy piłkę uderzy deska, a później wysyła tylko część info (kierunek, szybkość) którą ustala raz. Pomyślałem że podobnie będzie w przypadku pocisku, bo gdy będzie ich dużo i zaczną co ,np. 1s. wysyłać swoją pozycję by zrobić korektę gdzie się znajdują to przez to ze na mapie bedzie kilka pocisków tego samego gracza, zaczną teleportować się do siebie na wzajem. Ponadto gracze nie wysyłaliby aż tyle danych. Co do buffera to nie. Dane o ID 1 są wysyłane, a następnie odbierane, tyle. Co prawda informacja o stworzeniu pocisku to tak zwany Message, a nie Data shared jak wszystko i nie wiem czy gdy mplay_message wysyła pakiet, to gdy go ktoś odbierze zobaczy go jako 'pojedyńczy impuls' czy potraktuje jak zmienną z wartością true przez co faktycznie tworzy ciągle nowe pociski.
  3. Próbowałem się przerzucić na GMS'a ale przez kilka zmian w GML'u oraz kilka ogólnikowych "usprawnień"/zmian wydaje mi sie on trochę toporny i nie mogłem się przyzwyczaić. Co do odpowiedzi - nie to nie to, pocisk tworzy dany gracz po naciśnięciu LPM i wysyła informacje gdzie utworzyć ten że pocisk (w miejscu gdzie aktualnie się znajduję gracz), a pocisk wysyła informacje o szybkości i kierunku (gdzie u innych graczy po prostu pobiera te dane). Sam zapomniałem też wspomnieć o 2 rzeczach: 1.Problem nie leży w złym ustawieniu szybkości strzelania, bo pociski wystrzeliwane są co 20 kroków. 2.Gracz który strzel widzi swoje pociski normalnie, tylko reszta ma je "zbugowane".
  4. Hej, otóż ostatnio przeczytałem sobie manual tłumaczący zasadę działania multiplayer'a w GM 8.1. Udało mi się stworzyć prototyp w którym jest 6 ludzików (graczy) 3 w drużynie niebieskiej i 3 w drużynie czerwonej. System przydzielający nowego gracza do danego ludzika w grze działa, komunikowanie z serwerem i synchronizacja "prawie" też. Prawie ponieważ napotkałem pewną trudność, której nie potrafię rozwiązać. Otóż postacie te mogą strzelać. Generalnie wygląda to tak że każdy ludzik jest innym objectem (player1, player2, etc.) tak jak ich pociski (bullet1, bullet2, etc.). Niestety problem pojawia się w momencie strzału, gdyż trzeba wysłać wiadomość na serwer, która stworzy ten pocisk u wszystkich innych graczy. Generalnie udało mi się to ale niestety po strzale następuje dłuuuuuuga linia tego pocisku bez końca. Generalnie wygląda to tak (jak coś jest to obraz z widoku gracza 1, ludzik który strzela to gracz 2): Pocisk w Creat'ie zawiera taki kod: GML ///Kontrola kierunku strzalu i szybkosci pocisku if global.nextplayer != 1 //Definiowanie ID gracza (gracz1, gracz,2) { //Jesli nie x = mplay_data_read(4); //Pobierz pozycje x y = mplay_data_read(5); //Pobierz pozycje y speed = mplay_data_read(6); //Pobierz szybkosc objektu direction = mplay_data_read(7); //Pobierz kierunek obiektu exit; } else {//Jesli tak direction=point_direction(x,y,mouse_x,mouse_y); //Wez kierunek lotu z pozycji myszki speed=15 //Ustal szybkosc mplay_data_write(6,obj_pocisk1_team1.speed); //Wyslij dane o szybkosci pocisku mplay_data_write(7,obj_pocisk1_team1.direction); //Wyslij dane o kierunku pocisku } Kod wystrzału wygląda tak: GML if global.nextplayer != 1 { //Jesli nie y = mplay_data_read(2); //Pobierz pozycje gracza x x = mplay_data_read(3); //Pobierz pozycje gracza y image_single = mplay_data_read(38); //Pobierz kierunek gdzie patrzy sie gracz while mplay_message_receive(0); //Gdy zostanie odebrana wiadomosc... { if (mplay_message_id() == 100) instance_create(self.x, self.y, obj_pocisk1_team1); //Jesli to wiadomosc o ID=100 stworz obiekt pocisku } exit; } else { if mouse_check_button(mb_left) { if przeladuj=0 { if magazynek>0 { if strzelac=1 { strzelac=0 instance_create(self.x, self.y, obj_pocisk1_team1) //Stworz obiekt u siebie mplay_message_send(0, 100, obj_pocisk1_team1); //Wyslij wiadomosc o wystrzale do innych mplay_data_write(4,obj_pocisk1_team1.x); //Wyslij pozycje x , gdzie stworzyl sie pocisk mplay_data_write(5,obj_pocisk1_team1.y); //Wyslij pozycje y , gdzie stworzyl sie pocisk magazynek-=1 alarm[1]=20 } } } } } Zaznaczam też że większość kodu uciąłem żeby nie zawalać posta. Reszta działa i jedynym problemem jest ten duplikujący się pocisk. Jakieś pomysły jak to poprawić lub zrobić to lepiej???
  5. OMG, chodzi mi oto że nie mam zamiaru tworzyć listy wszystkich zmiennych jakie są w grze bo równie dobrze mogę stworzyć dla każdej oddzielną komendę. Dlatego właśnie chcę stworzyć tylko 2 komendy: pierwszą w której wpisuje zmienną i drugą, którą ustalam wartość wyznaczonej zmiennej. Tyle. Po prostu potrzeba czegoś co przetrzyma ustali wartość zmiennej której nazwa jest zapisana w "czymś" np.: właśnie w tablicy, po to żeby się potem do niej odwołać jak do zwykłej zmiennej jak ta: to_jest_jakas_zmienna=489. Struktury tablic? Tak, nie wiem, ale się domyślam, to niczym Excel tylko, że na komendach. A listy i tablice ... to to samo?? Bo ja z tego co mi się wydaje użyłem tablic. O realy? Udowodnij w jakiś cudowny i magiczny sposób, że nie wiem co to są zmienne i oświeć mnie Sherlocku. Mhh... szkoda tylko, że dokumentacja podaje podstawowe informacje o działaniu danego kodu i randomowy przykład jego użycia. Generalnie masz racje - zaprzestańmy dalej drążyć ten temat bo chyba do niczego już nie dojdziemy, a ponadto administracja forum zacznie się czepiać, że prowadzone dyskusje są nie na temat, bo ten został już rozwiązany 10 postów temu.
  6. Coś takiego? GML zmienna=string_replace(keyboard_string,'zmienna ',''); wartosc=string_replace(keyboard_string,'wartosc ',''); lista=ds_list_create() ds_list_insert(lista, 1, zmienna) lista=wartosc
  7. Pomysł z używaniem ds_list wydaje mi się najlepszy, tylko nie wiem jak z tego korzystać i wyszło mi coś takiego: GML wartosc=string_replace(keyboard_string,'wartosc ',''); //zmienna=wartosc ds_list_create() ds_list_add(zmienna1, zmienna) ds_list_insert(zmienna1, 1, wartosc) Wcześniej ustaliłem w 'zmienna' nazwę zmiennej której wartość chce zmienić. Ten kod jest dobrze czy nie bardzo??
  8. A istnieje inna metoda by najpierw ustalić zmienną, a potem zmienić jej wartość?
  9. Faktycznie, dzięki już działa :D Mam jeszcze jedno pytanko, bo generalnie postanowiłem zrobić 2 komendy, dzięki którym będę wstanie zmieniać wszystkie zmienne bez dodawania dla każdej oddzielnej komendy w konsoli. Jak zmienić wartość zmiennej, której nazwa jest w zmiennej? Pewnie nikt nic nie wie, ale wytłumaczę to tak: na początku do zmiennej 'warunek' podaję nazwę zmiennej w grze, czyli np.: 'szybkosc_biegania'. Następnie tworzę nową zmienna pomocniczą 'wartosc' do której przypisuje liczbe np.:3. Efektem końcowym ma być to: szybkosc_biegania=3. Użyłem czegoś takiego: warunek=wartosc ale nie działa. Da się to jakoś zrobić?
  10. Hej, otóż postanowiłem wykonać w swojej grze konsole, dzięki której można zmieniać warunki danego obiektu. Sam kod w skrypcie wygląda tak: GML if(string_copy(keyboard_string,0,17)='szybkosc_biegania') { stara_szybkosc_biegania=gracz.szybkosc_biegania gracz.szybkosc_biegania=string_replace(keyboard_string,'szybkosc_biegania ',''); keyboard_string='*** Zmiana szybkosci biegu z'+stara_szybkosc_biegania+' na '+gracz.szybkosc_biegania; } Niestety podczas wpisywania komendy wyskakuje taki błąd: ___________________________________________ ERROR in action number 3 of Key Press Event for <Enter> Key for object konsola: In script konsola_komendy: Error in code at line 15: keyboard_string='*** Zmiana szybkosci biegu z'+stara_szybkosc_biegania+' na '+gracz.szybkosc_biegania; ^ at position 51: Wrong type of arguments to +. Czym to może być spowodowane??
  11. Funkcja Draw i depth

    Sprytnie, dobrze wiedzieć.
  12. Funkcja Draw i depth

    OK, już wszystko działa tak jaka chciałem. Jednak zauważyłem bardzo dziwną anomalię: Gdy 1 raz zrobiłem te rysujące się kwadraty (tylko zielone) każdy z nich miał depth=-1 i wszystko działało tak jak powinno. Każdy kwadrat przykrywał wszystko inne, a zduplikowanie tych obiektów i po zmianie na kolor czerwony nagle przestało to działać... Archiwum X ? tylko, że w wersji: Archiwum GM: Return ?
  13. Funkcja Draw i depth

    Aaaaa no chyba, że tak. Lecz jeszcze jedna sprawa... Większym depth czyli depth=np.:1? Bo nie zapominajmy, że mając np.: 2 obiekty to ten który pojawi się jako ostatni, czyli ukryje drugi będzie miał depth=-1. GM liczbę minusową traktuje... hmmm... powiedzmy "bardziej priorytetowo"? Gdyż obiekty z depth=-x zawsze są na 'wierzchu' w przeciwieństwie do tych z depth=+x. Chociaż z matematycznego punktu widzenia to liczba +x jest większa niż -x. No cóż, tak GM został zaprogramowany, a tego zmienić się nie da.
  14. Funkcja Draw i depth

    OK, rozumiem z tym begin i end, ale od kiedy Depth ustala kolejność wykonywania skryptów?! Przypuśćmy, że mamy jakiś kod składający się z 10 linijek to oczywiste jest, że 10 linia wykona się na samym końcu. Ale Depth?! Tu: http://docs.yoyogames.com/source/dadiospic...ties/depth.html znajduję się potwierdzenie tego co mówię. GML draw_recrangle() draw_sprite() draw_recrangle() Okej, ale po co rysować 2x kwadrat? Nie lepiej: GML draw_sprite() draw_recrangle() Rysowanie sprite'a wykona się jako pierwsze, a kwadratu jako drugie.
  15. W swoich projektach bardzo często używam funkcji 'draw' do rysowania, gdyż jest to o wiele szybsze i prostsze. Po co tworzyć nowy sprite, który jest, np.: tylko prostym zielonym kwadratem jeśli to samo można zrobić za pomocą 1 komendy. Jednak używając jej wielokrotnie natrafiłem na pewien problem. Otóż gdy rysuje 2 obiekty na sobie nakładają się na siebie (1 przysłania 2), lecz niestety w pewnym przypadkach albo zwykły sprite jest nad tym narysowanym obiektem z funkcji 'draw' lub 2 taki obiekt nieoczekiwanie go przysłania. Moje pytanie jest następujące: Czy jest jakiś sposób na ustalenie "głębi" (depth) rysowanych obiektów za pomocą tej że funkcji? Próbowałem zmieniać głębie normalnie w obiektach, które posiadają skrypt rysowania, jednak to nie daje żadnych efektów. http://zapodaj.net/images/b1748538f4323.jpg Na przedstawionym screenie czerwony prostokąt jest narysowany funkcją draw_rectangle(), a białe kwadraty draw_sprite(), obiekt rysujący prostokąt ma depth=-1, a obiekt rysujący sprite depth=1
×