Skocz do zawartości

Quetzacotl

Użytkownicy
  • Postów

    255
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez Quetzacotl

  1. Ranmus robiłem gre w stylu globulosa, ale z kolizjami GMa mozna sobie darowac. Ciagle cos sie blokowalo, zacinalo. Nawet napisalem wlasny skrypt odpowiadajacy za kolizje i odbijanie sie we wlasciwe strony, wykorzystujac przy tym rozne sinusy,cosinusy itd. Ciagle byly problemy w tym, ze cos sie gdzies blokuje.

  2. Jeśli jest max dwoch gracyz to nie uzywasz zadnych player find, po prostu w miejscu gdzie bedzie mplay_create_session dasz, global.player=1; a tam gdzie sie dolacza czyli mplay_join_session bedzie global.player=2;, jesli chcialbys wiecej playerow to musialbys zrobic wlasny system identyfikacji kazdego nowego playera. Tzn taka petla ktora by wyszukiwala najmniejszy wolny id i nadawala go graczowi.

    I pamietaj, ze na mapie gracza ktory dolaczal nie ma byc zadnych obiektow ustawionych na poczatku, bo one beda sie tworzyc dopiero jak powstana na serverze, zgodnie z funkcja.

    Aha jeszcze jest taka sprawa, ze klient musi ciagle wysylac polozenie swojej postaci do servera a server ja odczytywac.

    Co do image_single, ja mam GM6.1 i działa image_single jak i zarowno image_index.

  3. Little Fish zbdury gadasz, wlasnie w tej chwili wchodzi moda na robienie gier opartych na javie, czemu? bo chociaz, ze jest wolniejsza od c++ to jest duzo bardziej funkcjonalniejsza i wygodniejsza, a jako, ze komputery ciagle sie rozwijaja i procesory sa coraz szybsze to pisanie w jezyku wolniejszym nie bedzie robilo roznicy.

    Dużo jest dobrych silników. Zassaj Ogre3D i pokaż jak łatwo robić gry pod gotowym engine.

    wiesz co to jest proownanie? sprobuj zrobic gre od podstaw a gre na gotowym silniku. Zreszta zrobienie gry/moda na silniku Half Life 1 trudne nie jest, oczywiscie zalezy to od tego jaka chcesz gre zrobic.

  4. jesli masz przeszkadzajki to zrob tak, aby if host=1, czyli server, wysylal informacje o polozeniu kazdej z nich. Problemem jest to, ze wszystkie one sie tworza praktycznie jednoczesnie na poczatku gry, jesli ich ilosc jest stała to wteyd nie ma problemu bo i host i klient mają takie same id dla kazdego obiektu, ale jak sadze w Twojej grze sa przeszkadzajki ktore czyms strzelają, a to są dodatkowe obiekty ktore rowniez musza byc brane pod uwage. Wtedy jest b. proawdopodobne, ze id sie zgadzac nie beda.

    Jak to zrobic: kazdemu rodzajowi przeszkadzajki dajesz w event create wyslanie message do klienta. Message ten musi zawierac 5 wartosci: x, y, id, object_index i image_single, Jako, ze normalnie jedna wiadomoscia mozesz wyslac jedna wartosc to proponowalbym uzycia kompresji o ktorej juz moiwlem, ale jesli nie chcesz to musisz wyslac 5 wiadomosci pod rzad. Nadajesz tym wiadomosciom dajmy na to id 1, ktore bedzie oznaczalo, iz powstal nowy object. Klient musi miec obj ktory ma w stepie ustawione sprawdzanie nowych wiadomosci i jesli wiadomosc ma id=1 to znaczy ze powstal obj. Wtedy taki klient zaleznie od tego czy wysylasz 5 wiadomosci pod rzad czy skompresowales odbiera wszystkie te 5 wartosci, nastepnie idd=instance_create(x z wiadomosci,y z wiadomosci,object_index ktory pobrales z wiaodmosci), potem

    idd.image_single=image_single ten ktory pobrales;

    idd.idd=id ktory pobrales;

     

    I w tej chwili masz stworzony object w tym miejscu w ktorym stworzyl sie na serverze, masz rowniez id tego objectu.

    Trzeba zaznaczyc, ze akcja w CREATE z wysylaniem wiadomosci zachodzi tylko wtedy if host=1

    Skoro mamy juz stworozny obiekt to teraz trzeba ciagle odczytywac jego polozenie. Takze dla tego obiektu w akcji STEP

    if host=1

    najpierw wysyla wiadomosc z id obiektu (dajmy na to, ze ten message bedzie mial id=2) do klienta a nastepnie

    wysyla wiadomosci z 3 wartosciami: x,y i image_single.

    teraz akacja dla obiektu ktory bedzie u klienta

    if host=0

    odbiera pierwsza wiadomosc, sprawdza czy id wiadomosci=2 jesli tak to jesli mplay_message_value=idd

    oznacza, ze jest to wiadomosc od naszego obiektu i wtedy odbieramy dalsze wiadomosci. Wiadomosci ktore odbierzemy czyli x, y i image_single oczywiscie od razu aktualizujemy i obiekt ma dzieki temu nowe polozenie i aktualny sprite. I tak w kolko obiekt u hosta bedzie wysylal swoje dane a obiekt u klienta ciagle odczytywal. W ten sposob kazdy zrobisz z kazdym obiektem. CZyli:

     

    w akcji CREATE

    if host=1

    wysylasz 5 wartosci: x,y, id, image_single i object_index.

     

    w akcji STEP

    if host=1

    wysylasz id a nastepnie 3 wartosci: x,y, image_single

    if host=0

    odczytujesz pierwsza wiadomosc, sprawdzasz id wiadomosci, jesli id=2 to odczytujesz value i sprawdzasz czy pasuje do twojego idd, jesli tak to odczytujesz reszte wartosci i apdejtujesz.

     

    : D

  5. Jak juz jest gotowy silnik typu np Source to nie jest problemem zrobic gre. Bo praktycznie caly fundament masz gotowy, zmieniasz tylko kod rozgrywki na swoje potrzeby, mapy robisz w VHE a wszelkie potrzebne moduly typu Multiplayer masz gotowe i tylko je dodajesz.

  6. do tego uzywa sie tak zwanych dummy, generalnie w mmorpgach.

    Jest obiekt ktory ma tak jakby symulowac innego gracza, gdy doalcza nowy grasz to ten obiekt zostaje tworzony i w stepie sobie odczytuje pozycje non stop. Dummy ma przypisane id gracza lub jego name i odbiera wiadomosci tylko od tego konkretnego gracza.

    Nie wiem jak ma wygladac Twoja gra, jezeli ma byc rozna ilsoc graczy, np od 2 do 10. TO radze uzywac tego sposobu, jesli tylko dwoch to lepiej zrob to tak jak jest w przykladzie na gamemaker.nl

  7. ja bym to zrobił inaczej w stepie dajesz sprawdzanie czy sa wiadomosci jak sa, to sprawdzasz jakie mają id (dzieki id wiesz jakie informacje maja dla ciebie), jesli np id=2 co dajmy na to bedzie oznaczalo u ciebie przyjscie wiadomosci z chata to wtedy robisz akcje dodania tej wiadomosci do swojego okna chata

  8. Jesli gra dzieje sie ciagle w jednym roomie, a zakladam, ze tak bo to mario. To server (czyli ten kto zaklada gre) musi non stop zapisywac polozenie wszystkich obiektow ktore sie poruszaja do mplay_data lub wysylac message do drugiego playera z tymi danymi. Bedziesz tutaj potrzebowal jakiejs funckji archiwizujacej dane aby w jednej wiadomosci zmiescic wszystko:

    Pakuje dane, np data=pack(1)+pack(2)+pack(6)+pack(253)

    i dzieki temu pod zmienna data bedziesz mial 4 wartosci

    var byteA,byteB; 
    byteA = (argument0 div 255)+1; 
    byteB = (argument0 mod 255)+1; 
    return chr(byteA) + chr(byteB);

     

    Odczytujesz to w ten sposob:

    dat=unpack(data,1) tutaj dat=1

    dat=unpack(data,4) tutaj dat=253

    Po prostu pierwszy argument to zmienna w ktorej sa zarchiwizowane dana, a druga to numer wartosci ktora chcesz wyciagnac, numery sa przyznawane w tej kolejnosci w ktorej pakowales dane.

    var byteA,byteB; 
    byteA = ord(string_char_at(argument0,argument1*2-1))-1; 
    byteB = ord(string_char_at(argument0,argument1*2))-1; 
    return (byteA*255)+byteB

    Oczywiscie zakldamy ze skrypt do pakowana ma nazwa pack, a do rozpakowywania ma nazwe unpack.

×
×
  • Dodaj nową pozycję...