Konrad-GM Opublikowano 15 Czerwca 2021 Udostępnij Opublikowano 15 Czerwca 2021 50 minut temu, pankracy napisał: tak nie zadziała,bo nie będę miał zdeklarowanej zmiennej w create trampoliny i wywali mi komunikat o braku zmiennej start. To dodaj zmienną `start` w Create obj_trampolina. Jeżeli ten obiekt dziedziczy z innego obiektu Create, to na początku skryptu użyj event_inherited() to wtedy Create rodzica również zostanie wywołany. 50 minut temu, pankracy napisał: Chyba,że użyć var w step zdarzenia i dodać zmienną start? Nie, bo zmienna `start` będzie widoczna tylko i wyłącznie w tym bloku kodu, jak tylko go opuści to zostanie usunięta - nie będzie miała żadnej wartości, ani true ani false, przestanie kompletnie istnieć. Polecam przejrzeć:https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml language overview/variables/index.html - w tym podartykuły instance variables oraz local variables. pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 15 Czerwca 2021 Autor Udostępnij Opublikowano 15 Czerwca 2021 Godzinę temu, Konrad-GM napisał: To dodaj zmienną `start` w Create obj_trampolina. Jeżeli ten obiekt dziedziczy z innego obiektu Create, to na początku skryptu użyj event_inherited() to wtedy Create rodzica również zostanie wywołany. Nie, bo zmienna `start` będzie widoczna tylko i wyłącznie w tym bloku kodu, jak tylko go opuści to zostanie usunięta - nie będzie miała żadnej wartości, ani true ani false, przestanie kompletnie istnieć. Polecam przejrzeć:https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml language overview/variables/index.html - w tym podartykuły instance variables oraz local variables. Już dodawałem w trampolinie w zdarzeniu create zmienna start to nie pomaga zarówno jak ja ustawie na false czy true. Chyba że musze ją wtedy z bloku kodu step trampoliny usunąć? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 15 Czerwca 2021 Udostępnij Opublikowano 15 Czerwca 2021 `if obj_trampolina == false && place_meeting(x,y,par_entity)` serio? pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 15 Czerwca 2021 Autor Udostępnij Opublikowano 15 Czerwca 2021 21 godzin temu, Konrad-GM napisał: `if obj_trampolina == false && place_meeting(x,y,par_entity)` serio? Nie tu jest błąd Tak miało być `if start == false && place_meeting(x,y,par_entity) 21 godzin temu, Konrad-GM napisał: `if obj_trampolina == false && place_meeting(x,y,par_entity)` serio? Mam tak ale nadal trampolina co pięc sekund nie uaktywnia się jej animacja i gracz może cały czas od niej się odbić a ma się odbić tylko wtedy kiedy odtwarza się jej animacja obj_trampolina create start = false; pwr = 152; image_speed = 2;//bo chcemy żeby animacja była odtwarzana Alarm[0] start = false Step if start == false && place_meeting(x,y,par_entity) { alarm[0] = room_speed * 5 start = true; with instance_place(x,y,par_entity) { g = 0.5; hspd = lengthdir_x(1,other.image_angle+25)*other.pwr; vspd = lengthdir_y(1,other.image_angle+25)*other.pwr; } image_speed = 1; } Animation End image_index = 0; image_speed = 0; Edycja 1 Ok działa teraz co 5 sekund możliwość odbicja się od trampoliny,ale nie działa: - animacja która powinna być odtwarzana co 5 sekund w całości - zresetować grawitacje mam bezpośrednio w instancji par_entity ok ale jak konkretnie ma to wyglądać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 19 Czerwca 2021 Udostępnij Opublikowano 19 Czerwca 2021 W dniu 15.06.2021 o 21:34, pankracy napisał: animacja która powinna być odtwarzana co 5 sekund w całości Nie rozumiem, a to nie odtwarza się w całości czy jak, a ta animacja trwa aż 5 sekund? W dniu 15.06.2021 o 21:34, pankracy napisał: zresetować grawitacje mam bezpośrednio w instancji par_entity ok ale jak konkretnie ma to wyglądać? Może wystarczy tylko sprawdzanie, czy stoi na ziemi? `if !place_free(x, y+1) g = 1.0;` pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 20 Czerwca 2021 Autor Udostępnij Opublikowano 20 Czerwca 2021 12 godzin temu, Konrad-GM napisał: Nie rozumiem, a to nie odtwarza się w całości czy jak, a ta animacja trwa aż 5 sekund? Może wystarczy tylko sprawdzanie, czy stoi na ziemi? `if !place_free(x, y+1) g = 1.0;` Ta animacja ma się odtwarzać w całości co 5 sekund. Ona nie trwa 5 sekund.Ma tylko odtwarzać się co 5 sekund. Coś jak na zasadzie przycisku wł i wył Reasumując Trampolina zaczyna od stanu spoczynku i w stanie spoczynku ma się nie odtwarzać animacja następnie mija 5 sekund i animacja trampoliny powinna wtedy w całości się odtworzyć i jak skończy w całości się odtwarzać to znów przechodzi w stan spoczynku i tak wkółko:-) edycja 1 Jak wyłączę kod w zdarzeniu Animation END to animacja trampoliny działa jest odtwarzana,ale jakby w pętli,a powinna odtworzyć się w całości następnie 5 sekund powinna być w stanie spoczynku i na początkowej klatce i znów po 5 sekundach w całości się odtworzyć. Stąd właśnie był ten pomysł aby można było odbić się z trampoliny dopiero po 5 sekundach w chwili kiedy jest odtwarzana animacja.Jak nie jest odtwarzana animacja trampoliny to nie można się od niej odbić. Co do grawitacji..place_free nie wiem czemu nie działa a ustawiam go w zdarzeniu step obiektu par_entity Kod w całości wygląda teraz tak obj_trampolina create start = false; pwr = 152; image_speed = 2;//bo chcemy żeby animacja była odtwarzana Alarm[0] start = false; Step if start == false && place_meeting(x,y,par_entity) { alarm[0] = room_speed * 5 start = true; with instance_place(x,y,par_entity) { g = 0.5;//zmniejszona grawitacja podczas odbicia się gracza od trampoliny hspd = lengthdir_x(1,other.image_angle+25)*other.pwr; vspd = lengthdir_y(1,other.image_angle+25)*other.pwr; } image_speed = 1; // tu nie wiem czy to jest potrzebne } Animation END ///wylaczylem ten kod bo jak jest wlaczony to nie chce sie animacja trampoliny odtwarzac /* image_index = 0; image_speed = 0; par_entity create g = 1; //grawitacja hp = 999999999; maxHp = 999999999; vspd = 0; hspd = 0; inAir = false; inWater = false; par_entity Step if !place_free(x, y+1) { g = 1; //resetowanie grawitacji } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lipca 2021 Autor Udostępnij Opublikowano 3 Lipca 2021 W dniu 19.06.2021 o 20:41, Konrad-GM napisał: Nie rozumiem, a to nie odtwarza się w całości czy jak, a ta animacja trwa aż 5 sekund? Może wystarczy tylko sprawdzanie, czy stoi na ziemi? `if !place_free(x, y+1) g = 1.0;` No dobrze...Trampolina już działa.Osiągnąłem taki efekt jaki chciałem. Jednak trzeba było użyć alarmu i usunąć też kod z animation end który powodował zakończenie animacji. Jednak dalej zastanawiam się,gdzie powinien znajdować się kod który resetowałby grawitacje bohatera jak już dotknie ziemi. Nie chce w całej grze zmieniać tej grawitacji,bo jest ona prawidłowa chce tylko wyjątkowo dla tego JEDNEGO obiektu jakim jest trampolina zmienić grawitacje podczas skoku i zresetować ją jak już znajdzie się gracz na ziemi. Chłopaki pomóżcie bo pomysły moje już wyczerpałem. Za nic nie chce się zresetować animacja jak gracz dotknie ziemi. kod trampoliny wygląda teraz tak obj_trampolina create player_can_bounce = false; //startuje w spoczynku sprite_index = sprite1; //ustaw sprite odpowiadającego player_can_bounce pwr = 30; alarm[0] = room_speed * 5; //timer Alarm[0] if (sprite_index = spr_trampolina_idle) // aktualny stan bezczynnosc { sprite_index = spr_trampolina; // ustaw odbijający się sprite player_can_bounce = true; //„powiadomienie”, że gracz może się odbić alarm[0]=room_speed * 1; // sprawdź alarm0 ponownie po 1 sekundzie } else if (sprite_index = spr_trampolina) // aktualny stan odbicie { sprite_index = spr_trampolina_idle; // ustaw sprite spoczynku player_can_bounce = false; // „powiadomienie”, że gracz NIE może się odbić alarm[0]=room_speed * 3; // sprawdź alarm0 ponownie po 3 sekundach } Step if player_can_bounce == true && place_meeting(x,y,par_entity) { with instance_place(x,y,par_entity) { g = 0.5; // ustawiam spowolniona grawitacje podczas skoku bohatera hspd = lengthdir_x(1,other.image_angle+25)*other.pwr; vspd = lengthdir_y(1,other.image_angle+25)*other.pwr; } } par_entity (obiekt rodzic z którego dziedziczy bohater ,wrogowie i obiekty w grze) End step ///Fizyka if bbox_left+sign(hspd) < 0 || bbox_right+sign(hspd) >= room_width { hspd = 0; x = clamp(x,x-bbox_left,room_width-1-(bbox_right-x)); } if unstick(4) > 8 { instance_destroy(); } hspd += hspdB; for(i=0;i<abs(hspd);i++) { if solid_place(x+sign(hspd),y) { if solid_place(x+sign(hspd),y-1) || inAir == true { if solid_place(x+sign(hspd),y-2) || inAir == true { hspd = 0; } else { x += sign(hspd); y -= 2; hspd -= sign(hspd)/2; } } else { x += sign(hspd); y -= 1; hspd -= sign(hspd)/3; } } else { x += sign(hspd); if inAir == false && !solid_place(x,y+1) && solid_place(x,y+2) { y += 1; g = 1;// } else if inAir == false && !solid_place(x,y+2) && solid_place(x,y+3) { if !solid_place(x,y+1) { y += 1; g = 1;// } if !solid_place(x,y+1) { y += 1; g = 1;// } } } } hspd -= hspdB; hspdB = 0; if inWater == false { //Tarcie if hspd > 0 { hspd = max(0,hspd-f*multiF); } else if hspd < 0 { hspd = min(0,hspd+f*multiF); } //Vertykalne tarcie if vF == true { if vspd > 0 { vspd = max(0,vspd-f*multiF); } else if vspd < 0 { vspd = min(0,vspd+f*multiF); } } //Grawitacja vspd += g*multiG; } else { //Tarcie w wodzie hspd = lerp(hspd,0,.1); if abs(hspd) < .2 { hspd = 0; } vspd = lerp(vspd,0,.1); if abs(vspd) < .2 { vspd = 0; } } multiF = 1; multiG = 1; inAir = true; vspd += vspdB; for(i=0;i<abs(vspd);i+=1) { if solid_place(x,y+sign(vspd)) { if vspd > 0 { var slope = getSlopeInclination(); if slope <= -2 && slope >= -8 { x -= 1; hspd -= 1; i -= 1; } else if slope >= 2 && slope <= 8 { x += 1; hspd += 1; i -= 1; } else { vspd = 0; inAir = false; } } else { vspd = 0; } } else { y += sign(vspd); } } vspd -= vspdB; vspdB = 0; if inWater != place_meeting(x,y-sprite_height/3,obj_water) { inWater = !inWater; if inWater == true { vspd /= 2; hspd /= 2; } } Dziękuję Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lipca 2021 Administratorzy Udostępnij Opublikowano 3 Lipca 2021 To jest naprawdę za dużo kodu, żeby go analizować zwłaszcza, że może czegoś brakować. Ale masz przykłady gier platformowych i tam jest jak resetować grawitację gdy dotkniesz podłoża (sprawdzasz czy jest obiekt solid poniżej y+speed, i uzywasz moce contact solid, żeby idealnie dotknąć). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 4 Lipca 2021 Autor Udostępnij Opublikowano 4 Lipca 2021 11 godzin temu, gnysek napisał: To jest naprawdę za dużo kodu, żeby go analizować zwłaszcza, że może czegoś brakować. Ale masz przykłady gier platformowych i tam jest jak resetować grawitację gdy dotkniesz podłoża (sprawdzasz czy jest obiekt solid poniżej y+speed, i uzywasz moce contact solid, żeby idealnie dotknąć). Słusznie to jest za dużo kodu do analizowania.Nawet nie ma takiej potrzeby. Przyszedł Mi do głowy taki pomysł. A jakby dodać warunek if !place_free(x, y+1) and inAir = false { g = 1; //resetowanie grawitacji } i ustawić go w step trampoliny ale w części gdzie używa się with par_entity to odwoływałby się bezpośrednio do tej instancji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Lipca 2021 Administratorzy Udostępnij Opublikowano 4 Lipca 2021 Bardzo możliwe, aczkolwiek polecam też używanie move_contact_solid lub jakąś pętlę while, zeby idealnie o 1px dotknąć podłoża. pankracy 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 5 Lipca 2021 Autor Udostępnij Opublikowano 5 Lipca 2021 W dniu 4.07.2021 o 16:51, gnysek napisał: Bardzo możliwe, aczkolwiek polecam też używanie move_contact_solid lub jakąś pętlę while, zeby idealnie o 1px dotknąć podłoża. Co do funkcji move_contact_solid to widzę,że ona jest tylko dostępna w gms 2x chyba,że się mylę Ok testuje...dałem warunek zaraz za wybiciem się gracza z trampoliny i zrobiłem to po with aby mieć pewność,że odwołam się do par_entity i jednak nie chce resetować mi dalej grawitacji do wartości domyślnych. kod wygląda tak obj_trampolina step if player_can_bounce == true && place_meeting(x,y,par_entity) { with instance_place(x,y,par_entity) { g = 0.5; //poczatek spowolnionej animacji hspd = lengthdir_x(1,other.image_angle+25)*other.pwr; vspd = lengthdir_y(1,other.image_angle+25)*other.pwr; if !place_free(x, y+1) and inAir = false { g = 1; //resetowanie grawitacji } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Lipca 2021 Administratorzy Udostępnij Opublikowano 6 Lipca 2021 12 godzin temu, pankracy napisał: Co do funkcji move_contact_solid to widzę,że ona jest tylko dostępna w gms 2x chyba,że się mylę Dostępna jest co najmniej od GameMakera 5.0, bo pamiętam ją jeszcze z tutoriali platgormówi drag'n'drop z 2003 roku, gdy zaczynałem przygodę z GameMakerem. 12 godzin temu, pankracy napisał: nie chce resetować mi dalej grawitacji do wartości domyślnych Nie bardzo rozumiem ten kod. Nie wiem dlaczego kod od skoku jest w trampolinie, a nie w obiekcie postaci, do tego: - player_bounce nigdy się nie zmienia, wiec jak rozumiem ten warunek jest zawsze spełniony - jeśli par_entity to jest to co skacze na trampolinie, to jak spadnie, zawsze będzie jej dotykać, wiec i ten warunek jest spełniony - jak dla mnie zatem zawsze spełnione są oba warunku i zawsze ustawiasz hspeed i vspeed Wydaje mi sie, że kod jest zupełnie nie w tym miejscu, a to czy trampolina jest pod graczem czy nie, powinno być uwzględniane tam, gdzie jest kod od zwykłego skakania (o ile takowy w ogóle jest). Btw. dlaczego normalna grawitacja to 1, a nie 0? Np. domyślne GMowe gravity przecież jak ma wartość większą od 1, to dodaje do x i y: lengthdir_x/y(gravity, gravity_direction), wiec tylko 0 powoduje ustanie grawitacji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 7 Lipca 2021 Autor Udostępnij Opublikowano 7 Lipca 2021 W dniu 6.07.2021 o 10:30, gnysek napisał: Dostępna jest co najmniej od GameMakera 5.0, bo pamiętam ją jeszcze z tutoriali platgormówi drag'n'drop z 2003 roku, gdy zaczynałem przygodę z GameMakerem. Nie bardzo rozumiem ten kod. Nie wiem dlaczego kod od skoku jest w trampolinie, a nie w obiekcie postaci, do tego: - player_bounce nigdy się nie zmienia, wiec jak rozumiem ten warunek jest zawsze spełniony - jeśli par_entity to jest to co skacze na trampolinie, to jak spadnie, zawsze będzie jej dotykać, wiec i ten warunek jest spełniony - jak dla mnie zatem zawsze spełnione są oba warunku i zawsze ustawiasz hspeed i vspeed Wydaje mi sie, że kod jest zupełnie nie w tym miejscu, a to czy trampolina jest pod graczem czy nie, powinno być uwzględniane tam, gdzie jest kod od zwykłego skakania (o ile takowy w ogóle jest). Btw. dlaczego normalna grawitacja to 1, a nie 0? Np. domyślne GMowe gravity przecież jak ma wartość większą od 1, to dodaje do x i y: lengthdir_x/y(gravity, gravity_direction), wiec tylko 0 powoduje ustanie grawitacji. Gnysku,a jakby to wszystko wyrzucić z trampoliny i na nowo stworzyć ten kod. Jakbyś zaproponował swoje rozwiązanie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Lipca 2021 Administratorzy Udostępnij Opublikowano 8 Lipca 2021 Ja bym skorzystał z jakiegoś dostępnego w sieci przykładu, na pewno są z trampoliną czy skrzynką od której można się odbijać, i to bym wziął za bazę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się