Skocz do zawartości

pankracy

Użytkownicy
  • Postów

    320
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Ostatnia wygrana pankracy w dniu 2 Lipca 2021

Użytkownicy przyznają pankracy punkty reputacji!

Informacje

  • Użytkownik GameMaker Studio
    Tak
  • Użytkownik GameMaker 8
    Tak

Ostatnie wizyty

4 544 wyświetleń profilu

Osiągnięcia pankracy

Forum Veteran

Forum Veteran (6/13)

1

Reputacja

  1. Gnysku,a jakby to wszystko wyrzucić z trampoliny i na nowo stworzyć ten kod. Jakbyś zaproponował swoje rozwiązanie?
  2. 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 } } }
  3. 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.
  4. 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ę
  5. Dzięki chłopaki za pomoc. Twój kod jest bardziej czytelniejszy dla mnie.
  6. 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
  7. 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
  8. 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
  9. 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 }
  10. 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ć?
  11. 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ąć?
  12. 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; }
  13. 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;
  14. ? 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
  15. 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.
×
×
  • Dodaj nową pozycję...