-
Postów
320 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
1
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez pankracy
-
Gnysku,a jakby to wszystko wyrzucić z trampoliny i na nowo stworzyć ten kod. Jakbyś zaproponował swoje rozwiązanie?
-
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 } } }
-
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.
-
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ę
-
Animacja bohatera podczas wykonywania ruchów w wodzie jest zbyt szybka
pankracy odpowiedział(a) na pankracy temat w GM:Studio 1.x
Dzięki chłopaki za pomoc. Twój kod jest bardziej czytelniejszy dla mnie. -
Animacja bohatera podczas wykonywania ruchów w wodzie jest zbyt szybka
pankracy odpowiedział(a) na pankracy temat w GM:Studio 1.x
Dzięki Chłopaki to było to. a powiedzcie mi jak najprościej rozdzielić ten kod aby były dwa stany animacji bohatera. 1. Jak w wodzie jest w spoczynku i nie wykonuje żadnego ruchu 2 Jak w wodzie wykonuje ruch -
Animacja bohatera podczas wykonywania ruchów w wodzie jest zbyt szybka
pankracy odpowiedział(a) na pankracy temat w GM:Studio 1.x
Używalem już. I tylko działa to kiedy graczem bedąc w wodzie nie wykonuje ruchów lewo prawo góra dół.Jak się poruszę w wodzie obojetnie w jakim kierunku to wtedy przyspiesza animacja sprita.To jest ten problem -
Animacja bohatera podczas wykonywania ruchów w wodzie jest zbyt szybka
pankracy opublikował(a) temat w GM:Studio 1.x
Witam serdecznie wszystkich:-) Kod działa ok ale nie wiem gdzie ustawić animację bohatera kiedy pływa w wodzie. Kiedy jest bohater w wodzie nieruchomy(idle) to jest ok bo ustawiam tam image_speed z konkretną wartością ale jak poruszam się z nim w wodzie to wtedy jest ta animacja sprita za szybka i to właśnie chciałbym spowolnić. Poniżej kod obj_player Step //Plywanie swimDir = point_direction(0,0,keyboard_check(kRight)-keyboard_check(kLeft),keyboard_check(kDown)-keyboard_check(kUp)); if abs(keyboard_check(kRight)-keyboard_check(kLeft))+abs(keyboard_check(kDown)-keyboard_check(kUp)) != 0 { hspd += lengthdir_x(.5,swimDir); if !(swimDir > 0 && swimDir < 180) || place_meeting(x,y-sprite_height/3-1,obj_water) { vspd += lengthdir_y(.5,swimDir); } } if keyboard_check(kUp) && !place_meeting(x,y-sprite_height/1.5,obj_water) && vspd <= 0 { vspd = -12; } } End Step if sprite_index != spr_hero_water { sprite_index = spr_hero_water; image_index = 0; image_speed = 1; //ustawiam animacje plywania kiedy gracz jest w bezruchu w wodzie } if keyboard_check(kRight) && !keyboard_check(kLeft) && image_xscale = -1 { image_xscale = 1; drawAngle -= 180; } else if keyboard_check(kLeft) && !keyboard_check(kRight) && image_xscale = 1 { image_xscale = -1; drawAngle += 180; } if abs(keyboard_check(kRight)-keyboard_check(kLeft))+abs(keyboard_check(kDown)-keyboard_check(kUp)) != 0 { image_index += 2; if image_xscale > 0 { drawAngle -= angle_difference(drawAngle,swimDir)/16; } else { drawAngle -= angle_difference(drawAngle,180+swimDir)/16; } } } Dziękuję za każdą pomoc -
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 }
-
Nie tu jest błąd Tak miało być `if start == false && place_meeting(x,y,par_entity) 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ć?
-
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ąć?
-
tak nie zadziała,bo nie będę miał zdeklarowanej zmiennej w create trampoliny i wywali mi komunikat o braku zmiennej start. Chyba,że użyć var w step zdarzenia i dodać zmienną start? step if obj_trampolina == 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; }
-
No właśnie...a jak oblicze moment kiedy gracz znajdzie się na ziemi? a może dodać obiekt który jest solidem? mam obj_wall on jest solidem dodać w zdarzeniu step w trampolinie warunek,że jak dotknie obj_wall to grawitacja będzie wynosiła wartość 1? kod nie działa. Nadal animacja trampoliny nie jest odtwarzana co 5 sekund i w trakcie trwania animacji gracz może odbić się od trampoliny. może jeszcze flaga start musi być gdzieś zdefiniowana a nie tylko w alarmie0? obj_trampolina create pwr = 152; image_speed = 2;//bo chcemy żeby animacja była odtwarzana Alarm[0] start = false step if place_meeting(x,y,par_entity) { alarm[0] = room_speed * 5 with instance_place(x,y,par_entity) { g=0.5; //ustawiamy podczas skoku grawitacje wolniej aby gracz się przemieszczał hspd=lengthdir_x(1,other.image_angle+45)*other.pwr; vspd=lengthdir_y(1,other.image_angle+45)*other.pwr; audio_play_sound(snd_trampolina, 10, false); } image_speed = 1; } Animation End image_index = 0; image_speed = 0;
-
? Słuszne jest zmiana grawitacji po bloku with par_entity prawda? Bo wtedy odwołamy się bezpośrednio do tej instancji if place_meeting(x,y,par_entity) { alarm[0] = room_speed * 5 with instance_place(x,y,par_entity) { g=0.5; hspd=lengthdir_x(1,other.image_angle+45)*other.pwr; vspd=lengthdir_y(1,other.image_angle+45)*other.pwr; audio_play_sound(snd_trampolina, 10, false); } image_speed = 1; } Teraz pytanie gdzie powinno się resetować grawitacje do wartości 1
-
Oczywiście, że wiem With tyczy się konkretnej instancji do ktorej chcemy się odwołać bedąc w innej:-) Chyba mówimy o dwóch róznych rzeczach:-) Poprzedzajac with plus instancja do której chcemy się odwołać w innej instancji ma to wtedy sens zmiana wartości jakiejś zmiennej bo nie zmienimy tej wartości dla wszystkich obiektów tylko dla tej jednej do której się odwołaliśmy.
-
Hmmm na to wygląda,ale jeśli ja zmienie w par_entity w zdarzeniu create wartość grawitacji g=1; na g=0.5; to będę jak Amstrong na Księżycu Konradzie. Może inaczej co musiałbym teraz zrobić aby nie popsuć grawitacji? a jednocześnie mógł skorzystać z wolniejszej grawitacji przy tej trampolinie co wyżej a jak wyląduje powinno się zresetować do grawitacji jaką mam obecnie.
-
Konradzie zmienną globalną nie jest,ale z obiektu dziedziczącego par_entity korzysta praktycznie każdy obiekt bo dziedziczą z niego. Dlatego jak tam zmienię wartość g=1; na g=0.5; to gracz i obiekty wrogowie będą zachowywać się jakby wykonywali spacer na księżycu ?
-
Obj_trampolina Create pwr = 152; image_speed = 2;//bo chcemy żeby animacja była odtwarzana Alarm[0] start = false Tyle zrozumiałem;-) powyżej jest dobrze? teraz tak ustawienie grawitacji muszę Step if place_meeting(x,y,par_entity) { alarm[0] = room_speed * 5 with instance_place(x,y,par_entity) { hspd=lengthdir_x(1,other.image_angle+45)*other.pwr; vspd=lengthdir_y(1,other.image_angle+45)*other.pwr; audio_play_sound(snd_trampolina, 10, false); } image_speed = 1; } Animation end image_index = 0; image_speed = 0; I teraz grawitacja. w par_entity mam ją ustawioną na 1 więc tu mam ją ustawić za przełącznikiem with instance_place(x,y,par_entity)? bo jak wspomniałem jak grawitacje zmienię na 0.5 w samej instancji par_entity to mi się zmieni w całej grze a tego nie chce :-) No i pozostaje kwestia zresetowania grawitacji na wartość 1 jak już wyląduje gracz dotknie ziemi.
-
Dokładnie tak mam na myśli cooldown. Co do grawitacji fakt w obiekcie dziedziczacym par_entity tam musze grawitacje zostawić na wartości g = 1; bo inaczej zmieni mi się w całej grze.Natomiast mam ją jak napisałeś sterować w trampolinie w zdarzeniu step If place_meeting(x,y,par_entity) { g = 0.5; with instance_place(x,y,par_entity) { hspd=lengthdir_x(1,other.image_angle+45)*other.pwr; vspd=lengthdir_y(1,other.image_angle+45)*other.pwr; audio_play_sound(snd_trampolina, 10, false); } image_speed = 1; } Tylko teraz dobrze ustawić w bloku kodu grawitacje z powrotem na wartość 1 jak dotknie podłoża.
-
Tylko że ja używam starszej wersji gms 1.4
-
A dałbyś radę pomóc mi to w całość złożyć? Bo chodzi o to przypomne że gracz powinien mieć możliwość odbicia się od trampoliny dopiero jak animacja trampoliny się pokaże. I ta animacja powinna np co 5 sekund się pokazywać potem stan spoczynku i wtedy nie może się gracz odbić i po 5 sekundach animacja się wyswietli to wtedy może się odbić od trampoliny. Grawitacja wtedy powinna zwolnić o połowę a jak wyladuje to wrócić do pierwotnego stanu. Dźwięk trampoliny powinien być odtwarzany w chwili wyświetlania animacji.
-
Jak nie dam żadnej wartości w return to wyrzuci błąd. Stąd moje pytanie odnośnie dodania wartości. Ok mogę dodać na koniec warunku break; Chociaż nie wiem czy to nie powinno być używane ze switch; Teraz tak: Mój kod jest tak skonstruowany że animacja uruchamia się dopiero z zetknięciem gracza z trampoliną a kończy się w zdarzeniu Animation End. Kurcze nie mam pomysłu na to.
-
...
-
Dobra teraz widzę,że nie mam eventu Animation Start.jest tylko Animation End,update,event
-
Obj_trampolina Create image_speed = 0; start = true; pwr = 152; Step if (start == false) return 0;// jaka powinna być tu wartość? if place_meeting(x,y,par_entity) { with instance_place(x,y,par_entity) { hspd=lengthdir_x(1,other.image_angle+45)*other.pwr; vspd=lengthdir_y(1,other.image_angle+45)*other.pwr; audio_play_sound(snd_trampolina, 10, false); } image_speed = 1; } Animation start start = true; Animation end start = false; image_index = 0; image_speed = 0; Pisze z telefonu. Teraz grawitacje musiałbym ustawić w zdarzeniu step? I dodać warunek przy place_meeting że jak odbije się gracz to grawitacja zwolni na 0.5 a jak dotknie podłoża zresetuje się do wartości początkowej 1. Nie używałem funkcji return tam powinna być wartość 0??