Skocz do zawartości

MaxGaming

Użytkownicy
  • Postów

    510
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    4

Treść opublikowana przez MaxGaming

  1. W 8mce już był ;) Może nie starym - GMowo 8kowym stylu sprecyzuję :P I nie róbmy off topu skoro to nic nie wnosi do tematu.
  2. Roomów, nie obiektów ;) W 8ce przynajmniej nie było ;)
  3. 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
  4. 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;
  5. 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..
  6. 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
  7. 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?
  8. 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ś?
  9. 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?
  10. No zależy ile jeszcze tych solidów jest, bo może jednak warto by było.. Ale ogółem powinno być ok, jeżeli coś Ci buguje to wtedy zmieniaj ;) Aczkolwiek bym zmniejszył ten z prawej i u dołu margines. Ciekawi mnie też czemu u góry marginesu nie ma, a u dołu jest, tak miało być?
  11. 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 ;)
  12. 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
  13. @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 :)
  14. 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.
  15. GML if(vspd==0 && hspd==0) { image_speed=0; }else{ image_speed=1; }; Znów moje przeoczenie xD Dzisiaj już chyba nie myślę :/ Można też tamto poprawić, ale wyjdzie dłużej: GML if(vspd>0 ^^ hspd>0 ^^ vspd<0 ^^ hspd<0) { image_speed=1; }else{ image_speed=0; }; Więc lepiej to pierwsze.
  16. GML if(vspeed>0 ^^ hspeed>0) { image_speed=1; }else{ image_speed=0; }; Jak mówiłem dokładniej to cały kod musiałbym zobaczyć, ale wydaje mi się, że to może być rozwiązanie :)
  17. Samo vspeed? no to możesz np.: GML if(vspeed==0) { image_speed=0; }else{ image_speed=1; }; Żeby Ci dać pewne rozwiązanie musiałbym trochę więcej wiedzieć :P Najlepiej jakbym widział kod poruszania ;)
  18. 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ć. Daj kod poruszania, bo może np. masz na speed, albo jakąś inną metodą i ciężko w ciemno Ci powiedzieć co zrobić :)
  19. 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 :)
  20. 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 :)
  21. 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 ;)
  22. 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 };
  23. 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...
  24. 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."); };
  25. Jak się usuwa post? Już dałem radę. Co prawda sposoby ze stronki w msn nie dały rady, bo miałem niby wszystko ok to pobawiłem się uprawnieniami zacząłem zmieniać w tę i we w tą i dało radę jakoś xD
×
×
  • Dodaj nową pozycję...