Skocz do zawartości

Zablokowane Mobek..


Paqoo

Rekomendowane odpowiedzi

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

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

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

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

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.

  1. Deklarujemy zmienną odpowiedzialną za maksymalną ilość liczb
  2. 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.
  3. 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.
  4. Teraz znanym nam sposobem, osiągniętą sumę dzielimy operatorem dzielenia przez największy indeks tablicy value (czyt. przez ilość liczb).
  5. 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

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...