-
Postów
491 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez candy
-
Misiek999: A co jak wpiszę wartość ujemną ? Silnia wtedy nie istnieje. Dodatkowo silnia z 0 to 1. Twój kod tego nie sprawdza. GML t=false;// do t wpisujesz liczbę silnia=1;//najmniejsza wartość silni</span> GML (licz silnia) for(i=t;i>0;i-=1) silnia*=i; Pamiętaj, że musisz dodać warunek sprawdzający czy podana liczba jest nieujemna( czyli czy >=0). Robisz po prostu odpowiednią pętle.
-
Spróbuj w object3 dać śledzenie object1, a nie object2.
-
GML if(collision_rectangle(x-wartosc1,y-wartosc2,x+wartosc3,y+wartosc4,object,1,0)) //akcja</span> Można zawsze tak spróbować, ale nie będzie to jakaś super dokładna kolizja. Albo za pomocą: GML if(!place_free(x+wartosc5,y+wartosc6)) //akcja</span> Pod warunkiem, że ma mieć kolizje z obiektem, który jest solid.
-
A mógłbyś podać kod na śledzenie?
-
Stwórz zmienną globalną w obiekcie, który ma decydować o wyborze ilości graczy. GML (create) global.gracz=1; Wybierasz ilość graczy, np: GML if(keyboard_check_pressed(vk_left)) global.gracz=1; else if(keyboard_check_pressed(vk_right)) global.gracz=2; W którymś obiekcie na planszy dodajesz: GML (create) if(global.gracz==2) instance_create(x,y,o_hero_2)
-
?? Chyba, że to nie to id, którego należy użyć. A nie miało być tile_add()? Nie rozumiem dlaczego to miałoby o tym świadczyć. Ten kod po prostu powoduje, że gra zaraz się wyłącza po uruchomieniu. Załóżmy, że tiles o id 10000223 (czy o jakimkolwiek innym) istnieje (czyli wrzuciłeś go już do rooma przed startem gry). Wtedy każdy stworzony tiles będzie miał już inne id niż 10000223. Więc na ogół się to nie sprawdzi. E: Problem rozwiązany. Nagle zaczęło działać :blink: Dzięki za pomoc.
-
Wpisałem nawet w step: GML if(tile_exists(1000223)) game_end() i nic. Tile o tym id istnieje.l
-
Nie napisałem tego bo myślałem, że to oczywiste. Pod zmienną plik_wy jest index pliku GML plik_wy=file_text_open_write("plik.txt"); GML file_text_write_string(plik_wy,string(tile_get_x(i))+"|"+string(tile_get_y(i))+"|"+string(tile_get_left(i))+"|"+string(tile_get_top(i))) Tutaj masz rację, pomyliłem się w pisaniu (pisałem ręcznie, nie kopiowałem kodu).
-
GML start=10000000;//start i end wpisuję ręcznie odczytuje z rooma id tilesów end=10000070; for(i=start;i<end;i+=1) { if(tile_exist(i)) { file_text_write_string(string(plik_wy,tile_get_x(i))+"|"+tile_get_y(i)+"|"+string(tile_get_left(i))+"|"+string(tile_get_top(i))) file_text_writeln(plik_wy) } } Proszę, ale to chyba nic nie da. Problem tkwi raczej w ifie.
-
Mam taki problem. Zrobiłem sobie tilesy i wstawiłem do rooma. Teraz chce zapisać ich x, y itp do pliku txt. Napisałem kod: GML if(tiles_exists(ID)) { //bla bla } Tylko, że nie działa. Zamiast ID wpisałem od razu id tiles (sprawdziłem w roomie i nic. Włączyłem debuga wpisałem tiles_exists(o_gracz.ID) i zwraca true. Nie mam pojęcia o co tu chodzi. Byłbym wdzięczny za pomoc. E: ID to zmienna przechowująca id tilesa jakby co.
-
Może po prostu masz kilka obiektów player_footballer i dlatego piłka szaleje. Spróbuj odwoływać się przez id player_footballer, a nie przez jego object_index.
-
Po pierwsze musisz mieć PRO, bo inaczej to po ptokach. Dla wgrywania dźwięku masz na przykład taki kod: GML global.muza=sound_add("muzyka/gra.mid",1,0); Zmienna global.muza "przechowuje" teraz dźwięk gra.mid z folderu muzyka. A gdybyś miał : GML global.muza=sound_add("muzyka/abc/gra.mid",1,0); to wgrałbyś dźwięk gra.mid z folderu abc, który znajduje się w folderze muzyka. W takim zapisie ważne jest aby pierwszy folder znajdował się w folderze z grą. Jeżeli chcesz się odwołać do pliku, który znajduje się w innym folderze niż gra musisz np odwołać się przez pełną ścieżkę (np "C:/Program Files/Game_Maker7/gra.mid") albo napisać funkcję, która zwróci Ci ścieżkę do szukanego pliku. Tutaj jest ryzyko, że nie wszyscy muszą mięć taką ścieżkę na kompie. Następnie uzupełniasz argumenty. Resztę zasobów wczytujesz w podobny sposób, poczytaj w helpie. Pamiętaj, aby usuwać pliku jak są już Ci nie potrzebne: GML sound_delete(global.muza) Dotyczy to także sytuacji gdy chcesz wgrać nowy dźwięk do tej samej zmiennej: GML sound_delete(global.muza) global.muza=sound_add("muzyka/gra2.mid",1,0); Jak tego nie zrobisz stracisz dostęp do wcześniejszego wczytanego pliku i w konsekwencji będzie zżerał dodatkową pamięć.
-
Aby zrobić maskę tworzysz oddzielny sprite o tych samych wymiarach i originach co sprite herosa. Następnie rysujesz jakikolwiek kształt. Ustawiasz w obiekcie maskę. Masz taką rozwijaną listę "Mask" w lewej części okienka i wybierasz sprite'a, który ma być maską. Teraz maska będzie odpowiadać za kolizje, a nie aktualny sprite herosa. Oczywiście, najlepiej jest zrobić maskę o kształcie prostokąta.
-
W platformówkach bez maski nie zajdziesz daleko. Dzięki nim robisz precyzyjne kolizje i Twój hero nie zacina się na klockach kawałkiem ucha czy inną częścią ciała. Poczytaj trochę o zastosowaniach masek. Poustawiaj origin spritów tak aby współrzędna x była po środku sprite'a. Ustawienie w lewym górnym rogu nie jest najlepszym pomysłem. Sprawia to kłopoty gdy zmieniasz sprity z hero_lewo na hero_prawo. Wtedy hero, za każdym razem jak się obraca, przesuwa się o jakiś x w lewo lub prawo. Dodatkowymi plusami ustawienia origina na środku jest to, że nie trzeba robić spritów na lewo i jednocześnie na prawo, wystarczy w jedną stronę i zabawa z image_xscale (chyba, że te sprity w dwie strony mają być z jakiś przyczyn). Nie musisz pisać wtedy GML if(place_free(x+4,y)) x+=17; tylko GML if(place_free(x+4,y)) x+=4; Łatwiej jest wtedy zapanować nad ruchem postaci.Co do skakania. Gravity jest co step zwiększane o wartość jaką podałaś. Zrób sobie nowy room i ustaw w nim samą szynszylę. W create szynszyli dopisz room_speed=3. Włącz F6, kliknij na zielony krzyżyk i wpisz object1.y. Zobaczysz jak się zmieniają współrzędne y. Musisz ten problem rozwiązać inaczej. Aby szynszyla skakała dopiero jak będzie na ziemi dodaj warunek do skoku: GML if(!place_free(x,y+1)) //skok</span> Mam nadzieję, że to Ci pomoże.
-
Ja bym po prostu dał coś takiego. GML if global.combo = 0 { global.combo = 1; sprite_index=KratosCombo; //reszta akcji } else if global.combo = 1 { global.combo = 2; sprite_index=KratosCombo2; //reszta akcji } else if global.combo = 2 { global.combo = 3; sprite_index=KratosCombo3; //reszta akcji }
-
Można to zrobić tak: GML (step) //pierwsza metoda if(image_index==image_number-1) //akcja //druga metoda if(image_index==0&&animacja) { //akcja animacja=false; } W pierwszej metodzie akcja zostanie wykonana gdy zostanie wyświetlona ostatnia klatka animacji. W drugiej akcja zostanie wykonana gdy animacja wyświetli się cała i zacznie się od nowa. Zmienna animacja przechowuje informację czy jest wykonywana jakakolwiek animacja. Czyli wszędzie tam gdzie zmieniasz sprite postaci na jakąś animacje musisz dopisać: GML animacja=true;
-
Jak dopchasz skrzynkę do ściany, to możesz później w nią wjechać. Następnie skrzynka i przesuwa się w losowym kierunku (jak kulka jest w środku). Nie wiem czy to bug czy tak miało być. Musisz popracować jeszcze trochę nad grafiką i powinno być dobrze.
-
Ja bym to jednak zapisał tak: GML (create pocisk) bron=false; szybkosc=10; GML (strzal z broni) a = instance_create(bla,bla,pocisk) a.y=y; a.image_xscale=image_xscale;//pocisk będzie leciał w stronę, w którą skierowana jest broń</span></span></span> Bo jak usuniesz broń, z której wypalono pocisk, to zmienna bron odwołuję się już do nieistniejącego obiektu. A tak jak pokazałem omijasz ten problem. Na samym końcu dopisujesz w pocisku: GML (step pocisk) x+=szybkosc*image_xscale; Edit: oczywiście teraz bez zmiennej bron. Edit 2:Muuuuczek567 i tu mnie masz :)
-
Oczywiście, że łatwiej. Sam tak robię, ale on prosił o kod dla zmiany sprite'a, tak sądzę.
-
GML if keyboard_check(vk_left) { x-=3; if(sprite_index!=bohater_lewo) sprite_index=bohater_lewo; } if keyboard_check(vk_right) { x+=3; if(sprite_index!=bohater_prawo) sprite_index=bohater_prawo; } if keyboard_check(vk_up) && ! place_free(x,y+1) vspeed=-10; if place_free(x,y+1) then gravity = 0.4; else gravity = 0; Proszę.
-
Tutaj
-
Poszukaj w przykładach. Jest kilka pokazujących ruch do platformówki.
-
Powalony ten kod. GML x+=1 x-=1 y+=1 y-=1 To nie mam najmniejszego sensu. Ruszasz się o jeden px w prawo a następnie się cofasz. Analogicznie z y. W ostateczności Twój hero stoi tam gdzie wcześniej.
-
Wrzuć kod z eventem skoku. Inaczej możemy sobie gdybać gdzie jest problem.
-
Ewentualnie za pomocą funkcji sinus: GML (create) a=false; speedx=2;//szybkość wzdłuż osi x amplituda=5;//amplituda lotu (maksymalne wychylenie względem osi x)</span> GML (step) x+=speedx; y+=amplituda*sin(a*pi/10); a+=1; if(a*pi/10>2*pi)//jeżeli a*pi/10 jest większe niż 360 stopni zamień a na 0 a=false; Ten if można ominąć, i tak będzie poprawnie działać.