Skocz do zawartości

MaxGaming

Użytkownicy
  • Postów

    510
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    4

Odpowiedzi opublikowane przez MaxGaming

  1. No właśnie tak jak pisałem, nie mam bladego pojęcia jak działa persistant w obiektach, bo kiedyś nie było tego, a dopiero dzisiaj się dowiedziałem o takiej opcji, bo wcześniej nie zauważyłem ;p Czyli persistant działa tak, że obiekt wraz ze zmianą roomu przenosi się i zachowuje wszystkie zmienne do czasu usunięcia go?

    Ja podałem mu sposób "w starym stylu" jak mówiłem ;p

  2. Tworzysz nowy obiekt, który stawiasz tylko w pierwszym levelu i przenosisz z create tego obiektu do nowo stworzonego:

    GML
    global.watch = 0; //Ustawiamy globalnie na 0 w celu ich dalszego sumowaniu umozliwjajacego przejscie do nastepnej planszy po zebraniu ich odpowiedniej ilosci

    global.pScore = 0;

    global.life = 5;

    global.coins = 0;

    global.Saved = true;

    globalvar spawnX, spawnY;

  3. Jeżeli zrobimy to "po staremu", bez persistant to:

    1. Usuń(wytnij) definiowanie zmiennych z create tego obiektu który zajmuje się też HUD itp..

    2. Stwórz nowy, pusty obiekt i postaw go tylko w pierwszej planszy.

    3. Wklej w jego create(tego nowego obiektu) definicje zmiennych.

    Lub wersja która powinna być ciut bardziej optymalna:

    1. Usuń(wytnij) definiowanie zmiennych z create tego obiektu który zajmuje się też HUD itp..

    2. Wejdź w room z pierwszą planszą.

    3. Zakładka Settings>Creation Code

    4. Wklej tam kod definicji zmiennych.

    4.1. Nie powtarzaj dla innych roomów! Czyli wklejasz to w creation code tylko pierwszego levelu ;)

     

    Persistant możesz odznaczyć, bo nie wiem jak ono wpływa na instancje. Podejrzewam, że może działać tylko wewnątrz danego roomu, jakbyś chciał do niego powrócić to instancja zachowa swoje właściwości wtedy. Ale to tylko podejrzenia, a żeby wiedzieć na pewno trzeba poczytać dokumentację ;p Dla pewności, więc odznacz lepiej, chyba że Ty wiesz jak dokładnie to działa i to wykorzystujesz..

  4. Obiekt zapewne masz w każdym roomie? W create jeżeli dałeś to life będzie miało z powrotem wartość 5 CO CREATE OBIEKTU, czyli przy starcie każdego roomu który ten obiekt zawiera ;) Daj to w game start, albo ew. zrób osobny obiekt który będzie tylko w pierwsze planszy ;) Kolejną opcją jest też np create code PIERWSZEGO roomu-levelu :)

     

    @e: dobra, nie wiem do końca jak działa persistant obiektu, teraz dopiero doczytałem. To ciekawe trochę, bo niby w każdym roomie masz inną instancję tego obiektu :/

    W każdym bądź razie wychodzi na to, że jestem nie douczony, bo kiedyś tylko roomy mogły być presistant, a nowości dopiero staram się nadrobić :P

    Jedyne co mogę podpowiedzieć w takim razie to spróbuj zrobić to "staromodnie", bo przy persistant obiektu niestety zbyt wiele nie pomogę, bo dopiero teraz z Twojego postu się dowiedziałem, że takie coś istnieje xD Widzę, że muszę jeszcze wiele nowości nadrobić, choć z drugiej strony ja po prostu chyba wolę robić to starymi, sprawdzonymi metodami jeżeli nie wpływa to jakość specjalnie źle na optymalizację ;p

  5. GML
    //optymalizacja kodu gry

    instance_activate_all();

    instance_deactivate_region(view_xview[0]-64,view_yview[0]-64,// początek regionu, w ktorym dezaktywujesz obiekty

    view_wview[0]+64,view_hview[0]+64,false,true); // dlugosc i wysokosc regionu

    instance_activate_object(obj_game_controller);

    W nawiasach kwadratowych podajesz numer viewa, nie wiem czemu wpisłeś tam 64 zamiast 0. Musisz po prostu odjąć margines, a 0 w nawiasie kwadratowym pozostawiasz w spokoju :P

    Ogółem ok, tylko czy np. nie zespawnuje się gracz w aktywnym spawnie(bo wyjątek) w nie aktywnym regionie? Chodzi o to by np. nie zespawnowalo go w innym obiekcie który aktualnie jest nie aktywny. Przeanalizuj kod spawnu, czy jest przygotowany na taką ewentualność ;) Bo to czy może tak zostać zależy od tego jak wygląda fizyka i spawnienie. Tak poza tym naczęściej w platformówkach solidów jest najwięcej. Nie wiem jak jest u Ciebie, ale pomyśl czy na pewno chcesz je wykluczyć z dezaktywacji?

  6. Ale za wielkość viewa odpowida już view_width i height ;) Margines to dodatkowy obszar przeciw bugom.

    Marignes np. ustal na 32, czy 64px, chyba że wymaga więcej... a możesz i bez, ale panuje taka zasada, że dla bezpieczeństwa się zostawia jakiś margines.

     

    A chodzi mi o to, że pierwsze 4 argumenty to x, y, szerokość, długość. Odjęcie od x to margines z lewej, odjęcie od y to margines od góry, zwiększenie szerokości to margines z prawej, a zwiększenie wysokości dolny margines. Zrobiłeś margines z prawej i u dołu, a z lewej i u góry nie. Z lewej to jeszcze logiczne skoro nie da się w lewo chodzić, ale czemu u dołu jest, a u góry nie ma? To celowy zabieg, czy po prostu źle mnie zrozumiłeś?

  7. No właśnie, bo nie zrozumiłem bo napisałeś, że nie chcesz sprawdzać konkretnej zmiennej tylko jakąkolwiek :/

    Najłatwiej to zrób drugą zmienna np cos_old i zmieniaj tylko cos. Sprawdzaj w step potem, czy są różne(w ten sposób sprawdzisz, czy się zmieniła)

    GML
    if costam != costam_old

    {

    //akcja wyświetlania, czy jaka tam ma być

    costam_old=costam;

    }

    O to Ci chodziło, czy znów coś źle zozumałem?

  8. Max gaming;)

    to gra platformowa chodzi się w prawo;) ale można się cofać;) ale tylko w danej planszy;)

    Bardziej mi chodzi o efekt,że chce tak żeby wszystko co jest w podglądzie moim view okienku było aktywne,a po za nim już nie aktywne,o to mi dokładnie chodzi ;)

    No to mniej więcej tak jak piszesz, tylko jednak margines, aż tak duży być nie musi. Jeżeli nie masz zbyt długich obiektów to raczej margines duży być nie musi, jednak niewielki jednak bym dał dla pewności ;)

     

    A ponowna aktywacja musi być, bo inaczej raz zdezaktywowany obiekt, permanentnie by był już nie aktywny ;)

  9. No po prostu, jak zmieniasz zmienną to wyświetlasz napis, albo sprawdzasz czy się zmieniła. Potem dajesz alarm żeby znikł po jakimś czasie(instance_destroy(), ew. visible=false - w 1szym przypadku instancja wgl zostanie zniszczona a w 2gim przestanie być rysowana, pewnie chodzi Ci o to pierwsze). Sprecyzuj trochę pytanie, bo nie kumam :/

    Co do drugiej części. Dobrze rozumiem, nie chcesz sprawdzać konkretnej zmiennej tylko wszystkie? I jak jakakolwiek się zmieni(np.: fps) to ma się coś dziać? :o

  10. @Cygnus: Zazwyczaj to jest rozmiar view + margines jakiś tam.

     

    @Milord: Nie do końca. Marginesy robi się tylko dla pewności, np jakby jakieś obiekty były duże i by niby były dezaktyowane a nie powinny i mamy wtedy bugi itp.. To dużo zależy jak zbudowana jest nasza gra, ale raczej aż tak duże nie są potrzebne(czym większe tym większe obciążenie PC).

    instance_activate_all(); - aktywuje wszystkie obiekty, bo te nie aktywują się same co step ;) Taki efekt otrzymałeś bo dezaktywowałeś obiekty przed sobą a ich z powrotem nie aktywowałeś. Aha i jak w grze np chodzi się tylko w prawo to można dezaktywować wszystkie obiekty od lewej(bez marginesu)... Ale mówię to zależy wszystko od konstrukcji gry. Może poczytaj sobie więcej bardziej jak to działa, żeby więcej teorii mieć, bo o złotą metodę pasującą do każdego projektu tutaj ciężko :)

  11. GML
    instance_activate_all();

    instance_deactivate_region(view_xview[0],view_yview[0],// początek regionu, w ktorym dezaktywujesz obiekty

    view_wview[0],view_hview[0],false,true); // dlugosc i wysokosc regionu

    instance_activate_object(WYJĄTEK);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały</span>

    Chodź po 1. radziłbym trochę rozszerzyć, na wszelki wypadek

    GML
    instance_deactivate_region(view_xview[0]-margines,view_yview[0]-margines,// początek regionu, w ktorym dezaktywujesz obiekty

    view_wview[0]+margines,view_hview[0]+margines,false,true); // dlugosc i wysokosc regionu

    instance_activate_object(WYJĄTEK);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały</span>

     

    I lepiej podziel sobie na obiekty dynamiczne(te poruszające się np. npc-ty) i statyczne(np. ściana). Bo inaczej możesz mieć bugi, że npc npc-t wejdzie w ścianę(która jeszcze dezaktywowana nie będzie). Wtedy dynamicznym daj większy margines.

     

    Musisz dać to w jakiś obiekt, może być gracz. Step, begin itp. to raczej dużego znaczenia nie ma, chodź w specyficznych sytuacjach możesz musieć to zmienić zależnie od swojego kodu. Chociaż jeżeli masz kod np. w step zawsze, to danie w begin może trochę zmniejszyć ryzyko bugów, ale jeżeli stosujesz osobną dezaktywację dynamicznych i statycznych obiektów to nie musisz się raczej o to martwić ;)

     

    Respawn? To zależy, bo jeżeli mają się zawsze respawnować, to może być problem z dezaktywacją w ogóle. Jeżeli mają tylko w pobliżu gracza to tak, dezaktywuj.

  12. na pierwszej planszy ładnie się napis wyświetla,ale już na drugiej nie wyświetla się..no nie wiem..hmmm..persistent też nic nie daje czy to zaznaczone czy nie;)

    Zrobiłem symulację u mnie, czy znów nie jakiś babol, ale wszystko śmiga. Może obiekt napis znajduję się tylko w pierwszym pokoju? Pamiętaj że musisz go postawić w każdym pokoju(oczywiście w menu czy coś nie musisz, tylko tam gdzie ma się wyświetlać). Persistant nie powinno tu niczego zmienić.

     

    co do bohatera..hmmm dając w stepie przed kodem chodzenia gracza image_speed=0; nie do końca rozwiązuje problem ok chwilowo gracz się zatrzymuje,ale potem dziwnie się zachowuje;) niech już tu jest jak jest;)

    Daj kod poruszania, bo może np. masz na speed, albo jakąś inną metodą i ciężko w ciemno Ci powiedzieć co zrobić :)

  13. MaxGaming

     

    mała poprawka w stepie Bohatera wstawiam tak

     

    GML
    if(instance_number(obj_opis_plansz)=0)// zamiast > ,bo tak,to blokowało cały czas ruch bohatera,tak jakby chodził w miejscu

    {

    //kod poruszania

    }

     

    Zastanawia mnie jedna rzecz...bo fajnie już to wygląda..teraz np chcę użyć image_index i na moment,kiedy bohater stoi chciałbym zmienić sprita,by stał całkowicie w miejscu.

    Racja, znów pomyłka... Przepraszam, zmęczony jestem bo od rana praktycznie siedzę nad swoim projektem :/

    Fajnie, że nie przepisujesz w ciemno tylko próbujesz wszystko samemu ogarnąć :)

     

    @e:

    GML
    image_speed=0;

    Np daj to na początek kodu w porsuzania(przed kodem poruszania właściwie), a przy poruszaniu(nie wiem dokładnie jak to u Ciebie wygląda) daj z powrotem normalny image_speed(domyślnie =1). Albo uzależnij to od speed itp., zależy jak wygląda u Ciebie poruszanie :)

  14. Oczywiście :)

    Najprościej użyć switch i np. sprawdzać room:

    GML
    switch(room)

    {

    case rLevel11:

    draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-1");

    break;

     

    case rLevel12:

    draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-2");

    break;

     

    case rLevel21:

    draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 2-1");

    break;

    };

    Dajesz to w draw oczywiście.

    Można to jeszcze zrobić na wiele innych sposobów - jak wszystko - ale myślę, że ten będzie najłatwiejszy :)

  15. GML
    draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-4");

    Tekst na końcu, najpierw x i y :)

     

    i teraz w poruszaniu robisz:

    GML
    if(instance_number(obj_opis_plansz)>0)

    {

    //kod poruszania

    }

     

    Bo teraz dopiero pomyślałem, że wprowadziłem Cię w błąd przez moje roztargnienie. Wysypało by Ci error jakby obiekt znikł a Ty byś próbował się odwołać do jego alarmu.

    Ten kod sprawdza ilość obiektów z napisem i jeżeli jest jakiś(ich liczba jest większa niż 0) to wykonuje kod poruszania ;)

  16. Użyj do tego alarmów.

    W create obiektu napisu zrób

    GML
    alarm[0]=czas; //czas wyliczasz ze wzoru room_speed*sekundy</span></span>

    w alarmie 0(evencie) robisz

    GML
    instance_destroy();

    a w graczu sprawdzasz np, przed wykonaniem ruchu

    GML
    if(oNapis.alarm[0]==-1)

    {

    //kod poruszania

    };

     

    To rozwiązanie co do obiektów.

    A możesz po prostu w jakimś obiekcie, np. graczu dać w draw draw_text, albo draw_sprite i rysować ten napis. Wtedy podobnie, w create obiektu dajesz jakąś zmienna np.

    GML
    draw_napis=true;
    w alarm 0
    GML
    draw_napis=false;
    A w draw

    GML
    if(draw_napis)

    {

    //kod rysowania

    };

    Lub zrobic własny alarm/timer i wtedy rysowanie robisz if!(moj_alaram-=1), a w poruszaniu

    GML
    if(moj_alarm==-1)

    {

    //kod poruszania

    };

  17. Spróbuj tego.

    Ew pogoogluj, wklep sobie "Game maker decompiler" i szukaj. Sprawdź też np.: Tu

    Mi wiem że działał ten którego Ci zuplodowałem. Pamiętaj tylko, że jeżeli chcesz dekompilować nie swoje gry to już jest śliska sprawa, a publikowanie takowej ze zmianami jest już zupełnie nie legalne ;)

    Kilka lat temu wskazuje na grę z >=GM8.1, bo należy pamiętać, że już od jakiegoś czasu GMS kompiluje kod i nie da się tego już tak łatwo wydobyć ;)

    Oczywiście zakładam, że jej nie zabezpieczałeś, bo takie praktyki(skuteczniejsze, lub mniej) też występowały przy starszych wersjach niż GMS...

  18. GML
    if file_exists("save.dat") {

    file=file_text_open_append("save.dat");

    } else if{ //<------ Do czego ten if?

    file=file_text_open__write("save.dat"); //<------ ok pod warunkiem że dopiszesz kod zapisu a nie tak zostawisz

    }

    Ciekawi mi jeszcze po jakiego grzyba Ci otwieranie pliku tekstowego skoro używasz game_save?

     

    EdiePL podał Ci dobre rozwiązanie oprócz tego, że piszę się show_message, ale przed tym Cię sam przestrzegł.

    Więc:

    GML
    if(file_exists("save.dat"))

    {

    game_load( "Save.dat" );

    }else{

    show_message("Nie znaleziono pliku zapisu.");

    };

×
×
  • Dodaj nową pozycję...