-
Postów
2 911 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
14
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez Threef
-
Przenoszenie utworzonych plików manualnie
Threef odpowiedział(a) na MetalowyNerd temat w Pytania zaawansowanych
Ogółem możesz rozwiązać wszystkie problemy jednym rozwiązaniem... W grze sprawdzaj czy plik istnieje a jeżeli nie to twórz nowy z jakimiś podstawowymi wartościami. W ten sposób nie musisz się martwić o usunięcie danych i zawsze będziesz mieć jakieś które są stworzone przez ciebie. Innym rozwiązaniem jest użycie Included Files, ale z tym jest dużo roboty. Jeżeli chodzi o ukrycie plików na to nie poradzisz. GameMaker nie pozwoli Ci na ustawienie atrybutu Ukryty. Te pliki muszą tam być, ale nie powinno to być problemem. GameMaker zapisuje dane w Local Data o którego istnieniu mało kto wie. Poza tym takie dane powinieneś mieć w jakiś sposób zaszyfrowane. Problemem może być to że używasz formatu INI który został stworzony po to aby być łatwo edytowalny przez użytkowników. Jestem na "wakacjach" więc mało widzę poza kodem na monitorze. -
Rysowanie sprite o wymiarach + pozycja
Threef odpowiedział(a) na Fervi_ temat w Pytania początkujących
1. draw_sprite_stretched()? 2. display_get_width()*0.8 to będzie 80% szerokości ekranu. -
Nie robić tego. Nie powinieneś mieć nigdy takiej potrzeby.
-
Zapomniałem oddać. Drugi boss jak i inni przeciwnicy używający laserów lagują grę. Puść profiler w ruch i zobacz co jest nie tak. Wiem że może to zabrzmieć dziwnie, ale dla takiego typu gry możesz bez przeszkody zrobić laser jako duży sprite. Nic nie przeszkadza w tym aby wystawał poza ekran? #dissnadrugiegobossa Poza tym mam propozycję: Używasz sprytnego oszukańczego 3D. Myślałeś może o czymś takim aby zrobić pociski które przelatują nad graczem? Wystarczy rysować cień normalnie a pocisk wyżej. Dla przykładu właśnie laser byłby fajny gdyby przeciwnik poruszał się po sinusoidzie unosząc promień lasera trochę do góry, tak aby gracz mógł przelecieć "pod laserem". Edit: Jak strzelamy rakietami to spawnują się one z direction=0. Ustaw na odpowiedni bo widać to przez klatkę. ;) No i particle też lagują. ;P Tak będę cię męczył o optymalizację bo to przecież zwykły shmup. To musi działać wszędzie na 60FPS. Edit2: Strzelanie RT masz popsute. Sprawdzasz gamepad_button_check_pressed() a masz sprawdzać gamepad_button_check() :P
-
Drugi boss to bullshit. - Oklepana mechanika laserów. Nawet nie przeplatana innymi atakami. - Słaby punkt przez 3/4 walki tylko w miejscu laserów - Ogromna ilość HP, czyli strzelanie w działka i ich unikanie trzeba powtórzyć z 15 razy. - W dodatku można go omijać tak: obrazek Reszta fajnie. Ogólnie to giereczka zapowiada się dobrze. Fajnie umieściłeś pierwszą minę w grze, pomiędzy laserami, tak że gracz leci centralnie na nią. ;) Po zabiciu bossa zablokuj może strzelanie graczowi do momentu gdy 420 rozłoży już wszsytkie bonusy. Za pierwszym razem cały czas strzelałem bo spodziewałem się że muszę w power up wlecieć. Nawet nie wiem co wybrałem. Szukam gdzie zmienia się poziom trudności bo easy mi nie pasuje.
-
Drganie podczas podążania za obiekem
Threef odpowiedział(a) na gilos99 temat w Pytania początkujących
Problem jest z tym że wszystko działa jak powinno. Ustawiasz x i y na x i y obiektu którego chcesz ale dopiero step później. To działa odpowiednio. To ty źle myślisz i musisz dobrze rozważyć co chcesz zrobić. Jeżeli chodzi Ci o narysowanie jednego obiektu w tej samej pozycji co drugiego to użyj funkcji rysowania ale tylko w jednym obiekcie. Praktycznie nie istnieje okazja przy której powinieneś ustawiać pozycję jednego obiektu na pozycję drugiego. Jeżeli naprawdę potrzebujesz takiej pozycji to powinieneś dokładnie widzieć w jakiej kolejności wszystko się odbywa. Mowa tu o tym co jest pierw przesuwane, rysowane. Co jest do czego dodawane aby przejść na nową pozycję, etc. -
Hmm... Zawsze myślałem że nie działa i tak ma być. A teraz się zapytałem bo myślałem że działa, ale nie tak jak powinno. Sytuacja wyglądała tak: - W jednym obiekcie robiłem globalvar i przypisywałem do tablicy dane. - W drugim obiekcie odnosiłem się do tej tablicy (jakby była globalna) ale nic się nie działo, nawet komunikatu błędu Okazuje się że w room wsadziłem nie ten obiekt co chciałem. Wszystko działa. Można tak robić.
-
GML globalvar controls; controls[0]=1 To nie będzie działać? Tablica stanie się lokalna?
-
Potrzebny odpłatnie programista do pomocy
Threef odpowiedział(a) na pankracy temat w Pytania początkujących
W sumie to brakuje ostatnio pieniędzy na jedzenie, a takie coś to kilka godzin roboty. Pisz szczegóły na PW. -
Tak. Nazywa się to DPI. Dla przykładu zwykły iPhone który ma 4 cale (?) ma większą rozdzielczość od mojego 16 calowego monitora.
-
Tak. Działa to tak samo. GM będzie wykrywał zwykły dotyk jako lewy przycisk a podwójne tapnięcie jako prawy przycisk. Chyba ze zmienisz to funkcją device_mouse_dbclick_enable() Poza tym skoro już znasz device_mouse_check_button() to po co chcesz wracać do zwykłych eventów myszy? device_mouse_check_button() daje ci obsługę multi touch jeżeli przeiterujesz przez device. Pierwszy palec na ekranie to 0, drugi to 1... etc.
-
Problem jest taki że nie masz zdefiniowanej wcześniej zmiennej demage. Stwórz event create i wpisz w nim: GML demage=0 To nie baw się z piratem GameMaker 8.0 tylko pobierz GameMaker: Studio które jest darmowe i przewyższa GM8 w możliwościach.
-
Jeżeli zrobisz sobie coś takiego: GML a = ds_grid_create() b = ds_grid_create() c = ds_grid_create() d = ds_grid_create() A potem sprawdzisz wartości tych zmiennych to zauważysz że to są zwykłe wartości liczbowe. Możesz je zapisać gdzie chcesz. Zagnieżdżanie o którym piszesz istnieje tylko dla ds_list i ds_map i zostało stworzone dla obsługi JSON. Ja bym to zrobił tak: GML lista=ds_list_create() for(var i=0; i<10; i++) { //Tymczasowa zmienna do której przypisujemy nowa ds_map var m = ds_map_create(); //Nasze wartości. Dodajemy ile chcemy ds_map_add(m, "width", 5); ds_map_add(m, "height", 5); ds_map_add(m, "speed", 5); ds_map_add(m, "health", 5); //Dopisujemy nowo stworzona ds_map do listy ds_list_add(lista, m); //Oznaczamy pozycję w liście by GM wiedział że jest tam ds_map ds_list_mark_as_map(lista, i); } Odczytanie to: GML var map=lista[|4]; speed=map[?"speed"] Dopiero wstałem. Chyba nie o to Ci chodziło, ale szkoda mi to kasować i pisać od nowa bo i tak może się przydać. Pomogłem?
-
No popsułeś. A dopiero zaczynałem się bawić. A już w pełni poważnie. H2S04 musisz sprawdzać kolizję jakąś funkcją która zwraca ID tego z czym kolidujesz. Wtedy majac ID możesz zrobić tak: GML with(id_zapisane_w_zmiennej){ instance_destroy(); }
-
Nie, nie działa. I nie ma prawa działać. Używasz GML with(other){ instance_destroy(); } wewnątrz bloku kodu który nie ma other. Silnik nie ma pojęcia do czego chcesz się odnieść i przez przypadek działa. Wszyscy zwracają Ci uwagę abyś przeczytał w dokumentacji jak działa collision_meeting(). Zrób to teraz.
-
Jak sprawdzać który obiekt jest aktualnie w kolizji
Threef odpowiedział(a) na Flame temat w Pytania początkujących
zmienna = collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_wall,fa lse,true) Zapraszam do dokumentacji. -
Jak sprawdzać który obiekt jest aktualnie w kolizji
Threef odpowiedział(a) na Flame temat w Pytania początkujących
Dodatkowo collision_line() zwróci ci ID obiektu który przeszkadza na lini. Mając te ID możesz sprawdzać sobie dystans pomiędzy obj_character a tym konkretnym kawałkiem ściany który blokuje pole widzenia. No i jeżeli w distance_to_object() (albo jakiejkolwiek innej funkcji) podasz nazwę obiektu a nie ID instance, to funkcja odniesie się do pierwszej instance tego obiektu która istniała w room i nie jest nie aktywna. Nie odnosi się wcale do najbliższej instance. -
Cześć! Widzę że zostałem przywołany, ale widzę też że I am vader już dobrze wytłumaczył i nie mam tu za dużo do roboty. ;) Ogółem już sam zauważyłeś że możesz generować labirynt na 2 sposoby: jednorazowo przy starcie, albo na bieżąco przy zmianie pomieszczenia. Oba rozwiązania będą miały swoje plusy i minusy dlatego zaproponuję abyś zrobił sobie prototypy oboma sposobami i wybrał ten który wyda się ciekawszy. Wszystko i tak sprowadzi się do przechowywania danych. HuderLord śmiał się że przyjdę i będę proponował ds_map i też się zaśmiałem bo nie widziałem sensu, ale to też jest możliwość. Na pewno odradzę ds_grid i tablice 2 wymiarowe. Chyba że mapa miałaby ustalony maksymalny rozmiar, wtedy to nawet zalecam ds_grid. Sposób jaki zaproponuję do przechowywania danych to flagi bitowe które ostatnio pokochałem. Nie chce mi się opisywać dokładnie tego jak maja działać więc zapraszam do internetu gdzie zrobiło za mnie to już dużo ludzi. Link. Implementacja w GM jest banalna. Najwygodniej można to zrobić przy pomocy stałych albo enum. Ale skoro masz tylko 4 flagi to możesz olać to i zapamiętać wartości. Tylko po co? Skoro enum jest taki fajny? GML enum paths { N = 1, E = 2, S = 4, W = 8 } Dzięki temu zapisanie czy pokój ma przejścia wygląda tak: GML mapa[#xx, yy] = paths.N + paths.E + paths.W A efektem jest to że zapisana wartość to po prostu 11. Zamiast jakiś tablic, albo stringów. Problemem może się teraz wydawać sprawdzenie ścian, ale robi się to poprzez bitowy AND tak: GML if(mapa[#xx, yy] & paths.N) { // północna ściana } if(mapa[#xx, yy] & paths.E) { // wschodnia ściana } (...) Powodzenia ;)
-
Najwydajniejsze rozwiązanie. Od kt1117. ;) GML string_copy(string(10000000000+score),1,11)
-
Tak samo jak sprzedając płatne aplikacje. Sprzedajesz produkt, świadczysz usługę więc musisz prowadzić odpowiednią działalność i odprowadzać podatki. W przypadku reklam nie musisz bo to dostawce reklam świadczy ci usługę i tylko płaci tobie za tę możliwość.
-
Dźwięk silnika to zmienny pitch. Nie pamiętam czy w górę czy w dół, ale wystarczy powolutku zmieniać pitch co GM:S oferuje. Tak robi się dźwięk silnika w każdej grze.
-
Co? Nie nagrałem nigdy żadnego filmiku z GM. Tylko timelapse, z których nie można nic wyciągnąć, no i na YT wrzucałem VOD ze streamów. A streamów nie ma bo po ostatnich burzach nie naprawiono mi jeszcze internetu. :glare:
-
Moje, moje. Sprawienie żeby to znośnie wyglądało to już moje ostatnie zadanie przed wypuszczeniem nowego update. -_-
-
Najpierw wybierasz czy cchesz uploadować na wersję produkcjyjną, betę czy alpha. Będziesz mieć specjalny formularz do uploadu aktualizacji. Tam dopiszesz co chcesz. Changelog zmian, wersję etc. Potem jak rzuciłeś na beta, albo alpha to możesz przenieść na produkcję. Najpierw wybierasz czy cchesz uploadować na wersję produkcjyjną, betę czy alpha. Będziesz mieć specjalny formularz do uploadu aktualizacji. Tam dopiszesz co chcesz. Changelog zmian, wersję etc. Potem jak rzuciłeś na beta, albo alpha to możesz przenieść na produkcję.
-
Badu The Sheep to wygląda lepiej niż 20% innych projektów, a już nawet lepiej niż 95% innych amatorskich ścigałek. Edit: