Paqoo Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Mam taki kod z pętli na serwerze: GML case 12: //skeleton position update o_szkielet.x = readshort(); o_szkielet.y = readshort(); o_szkielet.sprite_index = readshort(); o_szkielet.image_speed = readshort(); o_szkielet.image_index = readshort(); clearbuffer(); writebyte(12); writebyte(value); writeshort(o_szkielet.x); writeshort(o_szkielet.y); writeshort(o_szkielet.sprite_index); writeshort(o_szkielet.image_speed); writeshort(o_szkielet.image_index); with(obj_client) { sendmessage(tcp); } Jeśli mam na kliencie w alarmie 0 u tego o_szkielet: GML //Update position clearbuffer(); writebyte(12); writebyte(global.myid); writeshort(x); writeshort(y); writeshort(sprite_index); writeshort(image_speed); writeshort(image_index); sendmessage(global.clienttcp); //Redo it alarm[0] = 1; To gracze będą go widzieli? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mike_p Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Widzę że bezmyślnie przeklejasz kod? Masz tylko jednego szkieleta na serwerze? Gracze grają szkieletami? Jeśli nie, to nie będzie działać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 LOLOLOLOLOTANK! OMG synu wiesz na czym polega adresowanie do obiektu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 7 Kwietnia 2008 Autor Udostępnij Opublikowano 7 Kwietnia 2008 To jak zrobić żeby tyczyło się to każdego szkeleta na serwerze? Zgaduję, że coś z global.myid? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Zgaduję, że coś z global.myid? W ogóle to wiesz od czego jest ta zmienna? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mike_p Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Nie zgadłeś. Global.myid to id klientów (chyba, że masz inaczej niż w przykładzie z którego zerżnąłeś). Po co klient ma ci wysyłać pozycję szkieleta, skoro to chyba on ma ją dostawać. Szkielet porusza się na serwerze, więc wystarczy, że będziesz wysyłał pozycję szkieleta do klienta (a klient ją odbierał rzecz jasna). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 7 Kwietnia 2008 Autor Udostępnij Opublikowano 7 Kwietnia 2008 W sumie racja. Troche nie pomyślałem. A tak na marginesie-czemu się tak czepiacie o korzystanie z przykładów? Sam nie napiszę silnika MMO! A jak poznam przykład dobrze to kto wie.. Można zrobić coś ulepszonego :P? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mike_p Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Nie czepiam się o korzystanie z przykładów, ale mógłbyś chociaż to przeczytać i zrozumieć jak to działa. Po to są przykłady :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Sam nie napiszę silnika MMO! No właśnie. To po co przerabiasz przykład. To do niczego nie prowadzi. Żeby zrobić dobra grę MMO trzeba ją samemu napisać. Moje zdanie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 7 Kwietnia 2008 Autor Udostępnij Opublikowano 7 Kwietnia 2008 Ale jak się go nie nauczę to nic nie zrobię. Nie zapamiętam przecież do czego jest każda linia kodu. Tutaj trzeba praktyki.. To wg mnie. Niby można, ale to nie wiersz, że się uczysz na pamięć. Z przykładu się nie dowiem, że na serwerze mają być też sprites z klienta... Takie rzeczy wychodzą po jakimś czasie eksperymentowania. Dziękuję wam jednak za pomoc. Już wiem jak się pisze te zmienne i wysyła dane, więc sam chyba dam radę :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Ale jak się go nie nauczę to nic nie zrobię. Nie zapamiętam przecież do czego jest każda linia kodu. Tutaj trzeba praktyki.. To wg mnie. Niby można, ale to nie wiersz, że się uczysz na pamięć. Z przykładu się nie dowiem, że na serwerze mają być też sprites z klienta... Takie rzeczy wychodzą po jakimś czasie eksperymentowania. Dziękuję wam jednak za pomoc. Już wiem jak się pisze te zmienne i wysyła dane, więc sam chyba dam radę tongue2.gif Wierz mi, że jak nauczysz się najpierw "normalnego" programowania i podstaw, to nie będziesz miał problemu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 7 Kwietnia 2008 Autor Udostępnij Opublikowano 7 Kwietnia 2008 Coś tam umiem. Tylko nie do końca radzę sobie z tablicami xD Ale nie do końca wiem, co w jakim miejscu ma być... Pętle i te bajery.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Ale nie do końca wiem, co w jakim miejscu ma być... No to to są podstawy. =P Trzeba rozumieć co się pisze. Bez tego daleko nie zajedziesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 7 Kwietnia 2008 Autor Udostępnij Opublikowano 7 Kwietnia 2008 Jestem w trakcie nauki .. Uczę się na błędach =) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pentalinio Opublikowano 7 Kwietnia 2008 Udostępnij Opublikowano 7 Kwietnia 2008 Tablice prosto mówiąc to są indeksowane zmienne. Potrzebę używania tablic łatwo jest zauważyć kiedy przyjdzie nam na nie zapotrzebowanie. Na przykład, chcielibyśmy aby możliwe było w łatwy sposób wyzerować wartość zmiennej a z liczbą na końcu 2, czyli a2. Wydaje to się banalne, i tak w rzeczywistości jest. GML a2 = 0; Jak widać żadnych problemów nie ma. A gdybyśmy chcieli zmienną a2, a3 itd. ... a99, a100? Akurat wtedy zauważyć by można zbędne występowanie 100 linijek kodu. Dlatego prostszym rozwiązaniem było by w jakiś sposób jednak indeksować te zmienne. Czy GML pozwala na to? Oczywiście, GML jak większość język programowania bądź skryptowych oferuje tablice (w niektórych językach występują tablice asocyjne, tzn. o indeksie w postaci łańcucha znaków, ale to tylko ciekawostka). Jak wygląda składnia nadania wartości tablicy? Przyjrzyj się dokładnie: GML tablica[indeks] = <wartosc>; Generalnie wygląda to całkiem łatwo. Jak to wygląda w praktyce? Przykład, który mogę zaoferować to program do wyliczania średni arytmetycznej spośród podanych przez nas liczb. Kod będzie banalnie prosty: GML maxValues = 0; do { value[maxValues] = get_integer( "Podaj liczbę, lub wpisz zero.", 0 ); maxValues += 1; // powiekszanie indeksu kolejnej tablicy, wydaje sie logiczne, gdyz co chwile bedziemy tworzyc nowa zmienna } until( value[maxValues] == 0 ) // koniec petli, gdy podamy liczbe 0 divAll = 0; // znane z obliczania sredniej ocen, dodajemy wszystkie liczby for( i = 0; i < MaxValues; i += 1; ) { divAll += value; } divAll /= MaxValues; // a potem dzielimy przez maksymalna wartosc show_message( "Średnia tych liczb to: " + string( divAll ) ); game_end(); Przykład może wydawać się trudny. Przeanalizujmy go. Można napisać w punktach proces obliczania średniej w tym przykładzie. Deklarujemy zmienną odpowiedzialną za maksymalną ilość liczb Zaczyna sie pętla. Jeśli Podamy zero, następuje koniec i przechodzimy do następnego punktu. W przeciwnym wypadku wszystko się zapętla. Pętla ta odpowiedzialna jest za tworzenie tablicy o coraz większym indeksie, gdyż indeksem jej jest ciągle powiększająca się zmienna maxValues. Teraz pętlą for dzięki iteratorowi (i += 1) będziemy "przechodzili" kolejno po wszystkich tablicach i sumowali je, tzn. wartość wszystkich liczb będzie znajdywała się w zmiennej divAll. Teraz znanym nam sposobem, osiągniętą sumę dzielimy operatorem dzielenia przez największy indeks tablicy value (czyt. przez ilość liczb). Na końcu wyświetlamy wartość średniej i kończymy program. Wydaje się trudne, ale w ten sposób łatwo będzie ci wszystko przychodzić. Pozostaje jeszcze jedno zagadnienie, mianowicie tablice dwuwymiarowe. Tego już nie będę szczegółowo omawiał, powiem tylko, iż są to tablice z dwoma indeksami. Oddzielamy je przecinkami. Tak jak poprzednio, potrzebne nam to będzie tylko wtedy, gdy będzie nam brakowało pomysłów na stworzenie odpowiedniego elementu gry. Np. taki ekwipunek, łatwo byłoby go "wykonać" na tablicach dwuwymiarowych. Wtedy tworzymy stałą, nazywamy ją FLD_EMPTY i nadajemy jej wartość -1. W zdarzeniu Create można stworzyć ekwipunek w taki sposób: GML for( i = 0; i < 10; i += 1; ) { for( j = 0; j < 10; j += 1; ) { inv[i,j] = FLD_EMPTY; // 10 x 10 = 100 pol wolnych } } Możemy sobie napisać funkcję dodającą przedmiot do plecaka, potrzebne będzie jednak stworzenie stałej FLD_ITEM. Teraz łatwo będzie napisać tę funkcję. GML for( i = 0; i < 10; i += 1; ) { for( j = 0; j < 10; j += 1; ) { if ( inv[i,j] == FLD_EMPTY ) { inv[i,j] = FLD_ITEM; return true; } } } Dodatkowo będzie ona nam zwracała wartość 1, jeśli w plecaku będzie miejsce na rzecz, lub 0, jeśli miejsca zabraknie. Wyświetlania go już nie na piszę, bo nie o tym mowa i szkoda na to czasu. Mam jednak nadzieję, że zrozumiałeś do czego służą tego typu zmienne. Miłej nauki :D ! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 7 Kwietnia 2008 Autor Udostępnij Opublikowano 7 Kwietnia 2008 Heheh. I w ten sposób mamy kolejny artykuł.. :P ? Dziękuję bardzo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi