pankracy Opublikowano 30 Czerwca 2019 Udostępnij Opublikowano 30 Czerwca 2019 Cześć wszystkim, Ustawiłem sobie nowego bohatera.Stary miał wymiary 50x50 a nowy obecnie ma 128x74. ustawiłem odpowiednio maskę kolizji bohatera. Natomiast mam problem z ustawieniem maski ataku bohatera. Bo w starym spricie bohatera kiedy bohater wykonywał atak to składał ręce i strzelał z baniek. Natomiast ten nowy sprite ataku ma bardziej skomplikowany atak. Nowy Bohater ma na plecach broń i kiedy wykonuje atak to wyciąga broń za pleców i przyjmuje atak trzymając broń. Kombinuje z ustawieniem tej maski ataku i wygląda to tak,że przy ataku bohater próbuje wykonać ruch ręka się unosi do góry i z powrotem wraca..nie wyciąga broni i nie przyjmuje pozycji ataku. Może za dużo mam obrazków animacji w spricie ataku? bo aż 89 Jak to ustawić? Ok chłopaki ogarnąłem. Problem polegał na tym,że musiałem ustawić końcową liczbę animacji sprita i teraz jest ok;D Mam tylko jedno pytanie. Moja animacja bohatera jak atakuje 89 obrazków,czy można to trochę zwolnić jej odtwarzanie? bo obecnie jest tak,że naciskam klawisz pod którym mam zdefiniowany atak i bohater szybko wyciąga broń i tak to wygląda.. Nie widać tej chwili jak wyciąga za pleców karabin tylko od razu go w ekspresowym tempie wyciąga;-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mateusz Nejman Opublikowano 2 Lipca 2019 Udostępnij Opublikowano 2 Lipca 2019 Oczywiście, że można image_speed = ileś tam HamsterMan 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Lipca 2019 Autor Udostępnij Opublikowano 2 Lipca 2019 To akurat już przerabiałem image_speed...:-) to nie pomaga... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Lipca 2019 Administratorzy Udostępnij Opublikowano 2 Lipca 2019 A próbowałeś wartości mniejsze niż 1 ? Np. 0.5 ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lipca 2019 Autor Udostępnij Opublikowano 3 Lipca 2019 Próbowałem też użyć wartości mniejszej od 1 Nie widać tego momentu jak bohater wyciąga za pleców broń..tylko od razu przyjmuje pozycje ataku. Mask_player mam ustawiony ten sam sprite z tyloma ilościami ramek co niżej ma spr_player_attack I powiedzcie Mi bo meczę się z tymi ifami. W nowym spricie ilość ramek skoku ma 10,a tu mam na starym spricie ustawione zaledwie 2. Jak to ustawić,że przy skoku bohatera będzie wyświetlone te 10 ramek animacji? w end stepie obj_player mam tak if wPowietrzu == true && drabina == false { sprite_index = spr_player_air; if vspd <= -1 { image_index = 0; } else if vspd >= 1 { image_index = 2; } else { image_index = 1; } } if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; image_index = 89-(zegarAtaku); zegarAtaku -= 1; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_index = 6-(zegarAtaku); zegarAtaku -= 1; } a tu niżej w stepie obj_player mam tak if key_check(key.action) && zegarAtaku == false { //if key_check(key.down) { //usuwany strzelanie na klawisz x + w dol zegarAtaku = 26; atakBierzacy = 1; with instance_create( x+(image_xscale*12), y-26, obj_projectile) //idealnie ta funkcja obraca pocisk gracza lub wroga { hspd = other.image_xscale*15; vspd = 0; //lekko do gory -4 //mocno do gory g = .0; //0.2 tor lotu paraboliczny speed=4; owner = par_player; sila = 0; eksplozja = true; zasiegEksplozji = 30; silaEksplozji = 2+(sign(other.pwrupStr)*8); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lipca 2019 Administratorzy Udostępnij Opublikowano 3 Lipca 2019 jeśli wymuszasz klatki obrazu, to ustaw image_speed na 0, żeby GM ich sam nie zmieniał. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lipca 2019 Autor Udostępnij Opublikowano 3 Lipca 2019 Nic to nie daje..nadal ta sama sytuacja..zastanawiam się co jest tego powodem..skoro image_speed=0; powinno zatrzymać animacje sprita. step if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; image_speed = 0; image_index = 89-(zegarAtaku); zegarAtaku -= 1; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_speed = 0; image_index = 6-(zegarAtaku); zegarAtaku -= 1; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lipca 2019 Administratorzy Udostępnij Opublikowano 3 Lipca 2019 powinno, ale.... zegarAtaku co klatkę zmniejsza się o 1. Może to zmniejszaj o mniejsze wartości, jak np. 0.2 ? Musisz zacząć czytać swój kod, w evencie step dodając przed każdą linijką "w tej klatce obrazu...." i od razu wychwycisz problematyczne miejsca. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lipca 2019 Autor Udostępnij Opublikowano 3 Lipca 2019 Staram się Gnysek, Też się za to już wziąłem zmniejszyłem zegarAtaku na wartość 0.5 jest lepiej,ale zastanawiam się,czemu animacja ataku sprite_index = spr_player_attack się zapętla? wciskam klawisz X i puszczam i animacja ataku mi się zapętla zamiast zatrzymać się na ostatniej ramce animacji to wraca do początkowej... obj_player end step if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; image_speed = 0; image_index = 89-(zegarAtaku); zegarAtaku -= 0.5; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_speed = 0; image_index = 6-(zegarAtaku); zegarAtaku -= 0,5; } druga sprawa... Zmieniłem kod dla animacji skakania. Teraz wyświetla mi 10 ramek. Ale problem polega na tym,że dzieje się to tak szybko,że nie widać kilku ramek. Więc dodałem image_speed=0.5 teraz przy skoku działa to idealnie.. ale jak już bohater wyląduje na podłożu,to animacja biegania nie działa.Bohater się szura po planszy.. te image speed obstawiam,że muszę dać warunek który sprawdzał by podłoże? że jak jest w powietrzu to image_speed=0.5 a jak na ziemi to jest tak jak było wcześniej. if inAir == true && climbing == false { sprite_index = spr_player_air;// wyswietlaj animacje skakania } event-other-animation end if(sprite_index == spr_player_air) { image_index = image_number - 1; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lipca 2019 Administratorzy Udostępnij Opublikowano 3 Lipca 2019 Bo tak działa GM, animacje się zapętlają. Musiałbyś dodać warunek, że jak jest na ostatniej klatce to ustawiasz image_speed na 0, albo jak zmieniasz sprite to też ustawiać na 0. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 3 Lipca 2019 Udostępnij Opublikowano 3 Lipca 2019 (edytowane) Co do zapętlania animacji, to jak @gnysek wspomniał już, GM je zapętla bo tak działa w nim animacja Może dodaj limit jakiś na image_index, np. coś takiego: if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; image_speed = 0; image_index = clamp(89-(zegarAtaku), 0, 89); zegarAtaku -= 0.5; } Co do drugiego problemu, to może spróbuj warunkowo clamp-ować image_index: if wPowietrzu == true && drabina == false { sprite_index = spr_player_air; var cmin = 0, cmax = 0; if vspd <= -1 { cmin = 0; cmax = 5; } else if vspd >= 1 { cmin = 5; cmax = 10; } else { cmin = 5; cmax = 5; } klatkaAnimWPowietrzu = clamp(klatkaAnimWPowietrzu + 0.5, cmin, cmax); image_index = klatkaAnimWPowietrzu; } Dodałem zmienną klatkaAnimWPowietrzu to musisz ją dać w Create i resetować (klatkaAnimWPowietrzu = 0) zawsze przy skakaniu. Edytowane 3 Lipca 2019 przez Konrad-GM Poprawka w kodzie :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lipca 2019 Autor Udostępnij Opublikowano 3 Lipca 2019 Dzięki chłopaki.. Dziękuje Konrad:-) Kurcze zupełnie inaczej to wygląda niż w ifach.. W przypadku pierwszym ten sposób pomógł..i bohater jak skacze są odtwarzane z odpowiednią prędkością ramki obrazu i jak zetknie się z podłożem to wszystko wraca do normy. Natomiast przypadek z ramkami animacji ataku jest nadal ten sam...nie pomaga te wyżej rozwiązanie.. nie dość,że animacja się nie zatrzymuje na ostatniej ramce to tu też image_speed spowodował,że animacja bohatera kiedy biegnie to szuranie po planszy. if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; image_speed = 0; image_index = clamp(89-(zegarAtaku), 0, 89); zegarAtaku -= 0.5; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lipca 2019 Autor Udostępnij Opublikowano 3 Lipca 2019 dodanie takiego warunku też nic nie daje if image_index = 89 then image_speed=0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lipca 2019 Administratorzy Udostępnij Opublikowano 3 Lipca 2019 Jeśli masz 89 klatek, to pierwsza ma numer 0 a ostatnia 88, uważaj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lipca 2019 Autor Udostępnij Opublikowano 3 Lipca 2019 if image_index = 88 then image_speed=0; Kurcze nie pomaga;/ powinno zatrzymać sprita ataku na ostatniej ramce... rozwiązanie poprzednie,ale nie działa: Step obj_player if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; if image_index == 88 { image_speed = 0; } image_index = 89- (zegarAtaku); attClock -= 0.5; pomysły już mi się kończą;/ nadal nie działa nie chce zatrzymywać się na ostatniej ramce animacji. edit. próbowałem jeszcze czegoś takiego w evencie other animation end dałem tak if (sprite_index == spr_player_attack) { image_index = image_number - 1; // zatrzymuje sie na ostatniej ramce image_speed = 0; // stop animacja } Niestety to też nie pomaga i dalej kurcze problem jest,że nie chce zatrzymać się na ostatniej ramce animacji..kurcze:/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Lipca 2019 Administratorzy Udostępnij Opublikowano 4 Lipca 2019 Jeśli nie pomaga, to pewnie gdzieś potem dalszy kod ręcznie znów zmienia speed/klatkę. Może ustawiasz własnie image_index = 89, a ponieważ klatek jest 88, GM automatycznie pokazuje zerową? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 4 Lipca 2019 Autor Udostępnij Opublikowano 4 Lipca 2019 Szukam przyczyny... To jest mój caly kod ze Step i End Step bohatera oraz Create tak automatycznie pokazuje Mi zerową klatkę:-/ Kod w obj_player wygląda u mnie następująco Obj_player Step ///ustawienia ruchu Bohatera // gdy Bohater jest zamrozony zatrzymujemy go if(zamroz==true) { x = zamroz_x; y = zamroz_y; gravity=0 vspd=0; hspd=0; } //licznik czasowy gry rs_timer ++; ///auto unstuck kiedy nam Bohater sie zaklinuje to podana nizej funkcja go odblokuje while(place_meeting(x,y,other)) { dir = point_direction(x,y,other.x,other.y) x = x + lengthdir_x(-1,dir) y = y + lengthdir_y(+10,dir) other.alarm[0] = room_speed; } if(variable_global_exists("textq")) //Jesli zmienna global.textq istenieje, to wykonuj ponizszy kod { if(ds_exists(global.textq, ds_type_queue)) //Jesli data structure istenieje, to wykonuj ponizszy kod { if(instance_number(obj_napis_plansz)=0)// zatrzymuje sprita bohatera na czas wyswietlenia napisu Stage { if(vspd>0 ^^ hspd>0 ^^ vspd<0 ^^ hspd<0) { image_speed=1 } else { image_speed=0; } if (vspd > 25) //Jesli predkosc spadania jest szybsza niz 25 (Mozna dowolnie zmieniac ta wartosc.) { global.damage+=5 } //Zwiekszenie obrazen o wartosc 1. (Zmienienie liczby na wieksza zwiekszy zadawane obrazenia po upadku.) if not place_free(x,y+1)//Jesli w poblizu nas jest jakis obiekt rowniez zostana zadane obrazenia { other.hp-=global.damage //Odejmujemy punkty zycia od wartosci zadanych obrazen. global.damage=0 //Resetujemy zadawanie obrazen po uderzeniu w ziemie by nie zabieralo go wiecej } } if(no_text()) //teraz Bohater stoi jak jest odwarzana sekwencja tekstowa textboxa { ///Kontrola if !place_meeting(x,y,obj_water) { //Normalny ruch if drabina == false { if key_check_pressed(key.jump) && wPowietrzu == false { vspd = -10-sign(pwrupJmp*3); silaSkoku = 3; //Zeskakiwanie w dol if key_check(key.down) && place_meeting(x,y+1,par_solid_ghost) { y += 4; vspd = 0; silaSkoku = 0; czasSkoku = 0; } } else if key_check(key.jump) && silaSkoku > 0 { audio_play_sound(dzwiek_skoku_anatolka, 1, false); //odtwarzamy dzwiek przy skakaniu vspd -= 2+sign(pwrupJmp); silaSkoku--; } else { if key_check_released(key.jump) && silaSkoku > 2 { vspd += 2+sign(pwrupJmp); } silaSkoku = 0; } if key_check(key.action) && zegarAtaku == false { //if key_check(key.down) { //usuwany strzelanie na klawisz x + w dol zegarAtaku = 26; atakBierzacy = 1; with instance_create( x+(image_xscale*12), y-26, obj_projectile) //idealnie ta funkcja obraca pocisk gracza lub wroga { hspd = other.image_xscale*15; vspd = 0; //lekko do gory -4 //mocno do gory g = .0; //0.2 tor lotu paraboliczny speed=4; owner = par_player; sila = 0; eksplozja = true; zasiegEksplozji = 30; silaEksplozji = 2+(sign(other.pwrupStr)*8); //image_blend = c_black; //kolor lotu pocisku audio_play_sound(dzwiek_anatol_strzela, 1, false); //odtwarzamy dzwiek przy strzelaniu } } if key_check(key.right) && !key_check(key.left) { if hspd < 8+(sign(pwrupSpd)*5) { hspd = min(hspd+(2+(sign(pwrupSpd)*2))*multiF,10+(sign(pwrupSpd)*5)); } image_xscale = 1; } if key_check(key.left) && !key_check(key.right) { if hspd > -8-(sign(pwrupSpd)*5) { hspd = max(hspd-(2+(sign(pwrupSpd)*2))*multiF,-10-(sign(pwrupSpd)*5)); } image_xscale = -1; } //Drabina if place_meeting(x,y,par_climbable) && place_meeting(x,y-32,par_climbable) && place_meeting(x,y+5,par_climbable) && zegarAtaku <= 0 && (key_check(key.up) || key_check(key.down)) { drabina = true; vspd = 0; hspd = 0; } } //Wspinanie sie if drabina == true { var __hsign = key_check(key.right)-key_check(key.left); var __vsign = key_check(key.down)-key_check(key.up); hspd = min(max(hspd+__hsign,-2),2); vspd = min(max(vspd+__vsign*2,-4),4); if __vsign == -1 && !place_meeting(x,y-32,par_climbable) { drabina = false; vspd = -10; } if __hsign != 0 { image_xscale = __hsign; } if !place_meeting(x,y,par_climbable) || !place_meeting(x,y+32,par_climbable) { drabina = false; } } } else { //Plywanie kierunekPlywania = point_direction(0,0,key_check(key.right)-key_check(key.left),key_check(key.down)-key_check(key.up)); if abs(key_check(key.right)-key_check(key.left))+abs(key_check(key.down)-key_check(key.up)) != 0 { hspd += lengthdir_x(.5,kierunekPlywania); if !(kierunekPlywania > 0 && kierunekPlywania < 180) || place_meeting(x,y-sprite_height/3-1,obj_water) { vspd += lengthdir_y(.5,kierunekPlywania); //audio_play_sound(dzwiek_anatol_plywa, 1, false); //odtwarzamy dzwiek gdy anatol plywa } } if key_check(key.up) && !place_meeting(x,y-sprite_height/1.5,obj_water) && vspd <= 0 { //kierunekPlywania do gory vspd = -12; } } } //dodane puszczanie drabiny przez bohatera przy dotknieciu podloza if place_meeting(x,y,par_climbable) && drabina=true && place_meeting(x,y+2,par_solid) { drabina=false; } //Normalny ruch if drabina == false { if key_check(key.down) && wPowietrzu == false { //Zeskakiwanie w dol if key_check(key.down) && place_meeting(x,y+1,obj_zejscie_drabiny) { y += 4; vspd = 0; silaSkoku = 0; czasSkoku = 0; } } } if vspd>0 && place_meeting(x,y,par_climbable) then drabina=true; if wPowietrzu=true && vspd = -10-sign(pwrupJmp*3) && silaSkoku = 3 && hspd>0 && place_meeting(x,y,par_climbable) && key_check(key.jump) && key_check(key.right) || key_check(key.jump) && key_check(key.left) then drabina=false; if key_check(key.action) && zegarAtaku == false && place_meeting(x,y,par_climbable) { zegarAtaku = 16; atakBierzacy = 1; with instance_create(x+10,y-26,obj_projectile) { hspd = other.image_xscale*10; vspd = 0; //lekko do gory -4 //mocno do gory g = .0; //0.2 tor lotu paraboliczny owner = par_player; audio_play_sound(dzwiek_anatol_strzela, 1, false); //odtwarzamy dzwiek przy strzelaniu } } //nabieranie powietrza if tlen<10 { if distance_to_object(obj_water)>1 { tlen+=0.2 } } //jesli nie ma powietrza energia ucieka i bohater potem traci zycie if tlen<0.01 { global.hp-=0.2 } if global.hp<=0 { global.life -= 1; } Obj_player End Step ///Sprity if(instance_number(obj_napis_plansz)=0 && no_text()) { if !place_meeting(x,y,obj_water) { if wPowietrzu == false && key_check(key.right) = key_check(key.left) && sprite_index != spr_player_stand && drabina == false { sprite_index = spr_player_stand; image_index =0; } if wPowietrzu == false && (key_check(key.right) || key_check(key.left)) && key_check(key.right) != key_check(key.left) && sprite_index != spr_player_run && drabina == false { sprite_index = spr_player_run; image_index = 0; } if wPowietrzu == true && drabina == false { sprite_index = spr_player_air; var cmin = 0, cmax = 0; if vspd <= -1 { cmin = 0; cmax = 5; } else if vspd >= 1 { cmin = 5; cmax = 10; } else { cmin = 5; cmax = 5; } klatkaAnimWPowietrzu = clamp(klatkaAnimWPowietrzu + 0.1, cmin, cmax); image_index = klatkaAnimWPowietrzu; } if drabina == true { if x == xprevious && y == yprevious { if sprite_index != spr_player_hang { sprite_index = spr_player_hang; } } else { if sprite_index != spr_player_climb { sprite_index = spr_player_climb; } } } if zegarAtaku > 0 && atakBierzacy == 0 { sprite_index = spr_player_attack; image_index = 89-(zegarAtaku); zegarAtaku -= 0.5; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_index = 6-(zegarAtaku); zegarAtaku -= 0.5; } if zegarAtaku > 0 && atakBierzacy == 1 && (key_check(key.right) || key_check(key.left)) { sprite_index = spr_anatol_przesuwa_skrzynie; image_index = 23-(odejmij); odejmij -= 1; } kierunekPlywania = point_direction(xprevious,yprevious,x,y); wysKierunek = kierunekPlywania; if image_xscale < 0 { wysKierunek += 180; } } else { if sprite_index != spr_player_water { sprite_index = spr_player_water; image_index = 0; } if key_check(key.right) && !key_check(key.left) && image_xscale = -1 { image_xscale = 1; wysKierunek -= 180; } else if key_check(key.left) && !key_check(key.right) && image_xscale = 1 { image_xscale = -1; wysKierunek += 180; } if abs(key_check(key.right)-key_check(key.left))+abs(key_check(key.down)-key_check(key.up)) != 0 { image_index += 2; if image_xscale > 0 { wysKierunek -= angle_difference(wysKierunek,kierunekPlywania)/16; } else { wysKierunek -= angle_difference(wysKierunek,180+kierunekPlywania)/16; } } } //animacja do przesuwania skrzyni if wPowietrzu == false && (key_check(key.right)) && (place_meeting(x-5,y,obj_skrzynia) || place_meeting(x+5,y,obj_skrzynia)) {sprite_index = spr_anatol_przesuwa_skrzynie; image_index = 23 -(odejmij); odejmij -= 1; } else if (key_check(key.left)) && (place_meeting(x-5,y,obj_skrzynia) || place_meeting(x+5,y,obj_skrzynia)) { sprite_index = spr_anatol_przesuwa_skrzynie; image_index = 23 -(odejmij); odejmij -= 1; } } Obj_player Create /// Glowne deklaracje zmiennych Bohatera ////////////////////////////// ///////ZMIENNE STALE////////// ///////////////////////////// ///Ustawienia event_inherited(); zbieranie=true; eksplozja = false; zasiegEksplozji = 22; silaEksplozji = 10; klatkaAnimWPowietrzu = 0; global.damage=0; //zmienna odzpowiedzialna za obrazenia zadawane po upadku z duzej wysokosci global.hp = 100; global.hit=0; //zmienna odpowiada za obrazenia kuli i miganie maxHp = 100; zegarAtaku = 0; odejmij = 0; //zmienna potrzebna do przesuwanie skrzynki w end step atakBierzacy = 0; global.zegarObrazen = 0; kierunekPlywania = 0; wysKierunek = 0; silaSkoku = 0; czasSkoku = 0; drabina = false; rs_timer = 0; //licznik czasowy w grze tlen=10;//ilosc tlenu //Moce specjalne pwrupSpd = 0; pwrupStr = 0; pwrupJmp = 0; //Pozycja odrodzenia bohatera i wywolanie skryptu widoku centralnego na graczu spawnX = x; spawnY = y; centerViewOnMe(); //zachowanie pozycji gracza przy checkpointach if (global.checkpointR == room) { x = global.checkpointx; y = global.checkpointy; } start_x = x; start_y = y; //funkcja dodaje HUD gracza na planszach bossowych if instance_exists(obj_game_controller) obj_game_controller.visible=1 else instance_create(0,0,obj_game_controller); //zamrazanie bohatera zamroz = false; zamroz_x = x; zamroz_y = y; playerSlot = 1; //ustalamy slot dla gracza numer 1 kierunekPlywaniaGamepad = 0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Lipca 2019 Administratorzy Udostępnij Opublikowano 4 Lipca 2019 Za nic nie rozumiem tego kodu, ale bym sprawdził miejsca z image_index = 0. Bo takich jest kilka. Musisz albo skorzystać z debuggera, albo chociaż z show_debug_message() na końcu kodu, zebby sobie wyświetlać w konsoli co masz za wrtość w image_index, to może pomóc. Ciężko przeanalizować kod, którego 99% nie ma związku ze zmianą sprite/klatki i w ogóle nie ma zwiazku ze sprawą. Za dużo tego jest do analizy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 4 Lipca 2019 Autor Udostępnij Opublikowano 4 Lipca 2019 A nie będzie tak,że jak użyje show_debug_message() to na końcu kodu może mi się wyświetlić bardzo dużo informacji związanych z image_speed=0 ? Ale przecież zmiana sprita bohatera i jego ramki animacji mam w obj_player bo gdzie indziej mógłbym mieć? przecież nie w obiektach wrogów czy w pułapkach ani w kolizjach. To są wyżej moje eventy Step i Step End..więcej nie mam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 4 Lipca 2019 Udostępnij Opublikowano 4 Lipca 2019 Używając show_debug_message() sam decydujesz co ma Ci wypisać. Możesz tam wprowadzić zmienną, albo dać jakiś string typu show_debug_message("Ta linijka kodu wykonała się - system poruszania") albo coś w ten deseń. Pomaga odkryć to, gdzie program liczy coś inaczej niż mieliśmy to w głowie. Cytuj przecież nie w obiektach wrogów czy w pułapkach ani w kolizjach A dlaczego nie? animacja otrzymania obrażeń, albo animacja utknięcia w jakieś pułapce. Musisz wiedzieć podstawowe rzeczy:sprite_index - obraz bądź animacja, który dany obiekt aktualnie wyświetlaimage_index - klatka animacji; Jeśli sprite_index posiada np. 13 klatek, to image_index ustala która z nich dokładnie ma być wyświetlonaimage_speed - prędkość odtwarzanej animacji Generalnie te trzy funkcję będą Ci potrzebne przy manipulacji animacją. No może jeszcze to:image_number - zwraca liczbę klatek w animacji; Czyli jeśli masz 13 klatek, to image_number zwróci liczbę 13 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 22 Listopada 2019 Autor Udostępnij Opublikowano 22 Listopada 2019 Mam takie pytanie... przy skoku bohatera nie wyświetla mi się pełna animacja składająca się z 52 ramek animacji. Wcześniej kiedy wstawiłem starego sprita który miał tylko 10 ramek animacji skoku,to całość się wyświetliła.. Co robię nie tak? Z góry dziękuje za pomoc:-) obj_player create klatkaAnimWPowietrzu = 0; step if inAir == true && climbing == false { sprite_index = spr_player_air; var cmin = 0, cmax = 0; if vspd <= -1 { cmin = 0; cmax = 52; } else if vspd >= 1 { cmin = 26; cmax = 26; } else { cmin = 26; cmax = 26; } klatkaAnimWPowietrzu = clamp(klatkaAnimWPowietrzu + 0.1, cmin, cmax); image_index = klatkaAnimWPowietrzu; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Listopada 2019 Udostępnij Opublikowano 23 Listopada 2019 Kolejny kogel mogel :V Po co Ci te zmienne:klatkaAnimWPowietrzu = 0;cmin = 0;cmax = 0; Do obliczania, kiedy animacja się zakończy? A nie lepiej użyć wbudowanego w gm:s "animation end"? I wtedy dajesz normalnie w stepie, żeby zaczął Ci wykonywać animacje po jakimś spełnionym warunku (choćby ten co masz), najlepiej od zerowej klatki, a w animation end dajesz, warunek, że jak ta animacja się zakończy, to ma zostać na ostatniej klatce Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Listopada 2019 Autor Udostępnij Opublikowano 23 Listopada 2019 dobra coś takiego... Tak działa;-) chociaż przydałoby się jeszcze troszkę zwolnić animacje.. Step if inAir == true && climbing == false { sprite_index = spr_player_air;// wyswietlaj animacje skakania } event-other-animation end if(sprite_index == spr_player_air) { image_index = image_number - 1; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Listopada 2019 Udostępnij Opublikowano 23 Listopada 2019 no i fajnie, brakuje jeszcze zaczynania animacji od początkowej klatki, ale to nie przeszkadza, to być nie musi. Do zmiany tempa odtwarzanej animacji służy image_speed:image_speed = 1; // normalna prędkość image_speed > 1; // szybsza prędkość image_speed < 1; // wolniejsza Daj sobie image_speed = 0.5; a po zakończeniu animacji, wróć do standardowej image_speed = 1; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Listopada 2019 Autor Udostępnij Opublikowano 23 Listopada 2019 No dobra,a na podstawie wyżej przedstawionego kodu;-) zrobić coś takiego.. Mam 52 ramki animacji skoku..i teraz tak: Bohater skacze i jak jest na szczycie już wyskoku to jest animacja do 26 klatki,a jak spadnie to kończy się na 52 czyli ostatniej.. tak żeby w pełni wyświetliła się animacja skoku bohatera...każda ramka.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 24 Listopada 2019 Udostępnij Opublikowano 24 Listopada 2019 Zacząć od image_index = 0, kiedy skok się zaczyna. Możesz zrobić np. if keyboard_check_pressed(vk_space) then image_index = 0; albo inacej, bo to zależy od twojego kodu sterowania: CREATE: animOdPoczatku = true; STEP: if(inAir == true && climbing == false && animOdPoczatku==true) { image_index = 0; //zaczynaj od pierwszej klatki sprite_index = spr_player_air;// wyswietlaj animacje skakania animOdPoczatku = false; } ANIMATION END: if(sprite_index == spr_player_air) { image_index = image_number - 1; animOdPoczatku = true; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 24 Listopada 2019 Autor Udostępnij Opublikowano 24 Listopada 2019 Ten sposób wyżej nie działa;-) Bohater skacze,ale kilka klatek tylko się wyświetla Być może za dużo jest ramek animacji skoku,bo aż 52 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 24 Listopada 2019 Udostępnij Opublikowano 24 Listopada 2019 kilka klatek się wyświetla a później co się dzieje? Zastyga w jednej klatce, zmienia się animacja, animuje od początku? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 24 Listopada 2019 Autor Udostępnij Opublikowano 24 Listopada 2019 Zmienia się animacja..ale jest nie pełna... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 24 Listopada 2019 Udostępnij Opublikowano 24 Listopada 2019 No jeśli animacja się zmienia, to znaczy, że gdzieś w kodzie tak masz zapisane, że przy jakimś warunku ma się zmieniać animacja edit: Chodzi mi o to, że gdzieś masz sprite_index który zmienia się, przy wykonaniu jakiegoś warunku, dajmy na to: Jesteś w powietrzu -> Animacja zmienia się na spr_animacjaskakania -> Wciskasz A lub D i zmienia się animacja, bo do tej akcji przypisany jest if od sterowania Czy coś takiego 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ę