Skocz do zawartości

pankracy

Użytkownicy
  • Zawartość

    254
  • Rejestracja

  • Ostatnia wizyta

Zawartość dodana przez pankracy

  1. 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;-)
  2. Maska kolizji ataku bohatera

    Zmienia się animacja..ale jest nie pełna...
  3. Maska kolizji ataku bohatera

    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
  4. Maska kolizji ataku bohatera

    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..
  5. Maska kolizji ataku bohatera

    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; }
  6. Maska kolizji ataku bohatera

    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; }
  7. Extra! jesteś cudotwórcą Królu nic dodać nic ująć;-) czapki z głów...
  8. Cześć wszystkim, Próbuje stworzyć proste intro obrazkowe.. Chciałbym uzyskać taki efekt. Jest ilustracja i pod ilustracją jest tekst i teraz kiedy nacisnę klawisz enter zmieni się ilustracja i zmieni się tekst pod ilustracją aż skończą się ilustracje lub tekst i wtedy po naciśnięciu też klawisza enter przejdę do następnego roomu. Zacząłem już tworzyć te intro obrazkowe. Chcę umieścić wiadomości w tablicy,a ilustracje w spritach jako osobne podobrazy. w create zrobiłem w taki sposób index = 0 //Zmienna,która przechowuje, w której wiadomości/podobrazie jestem msg[0] = "na poczatku powinna wyswietlic sie ilustracja nr 1" msg[1] = "Teraz powinna wyswietlic sie ilustracja nr 2" msg[2] = "Na koniec powinna wyswietlic sie ilustracja nr 3" msg[3] = "" // Dodanie dodatkowej pustej wiadomości do tablicy msg, aby uniknąć awarii po zakończeniu ilustracji W Stepie mam tak i nie działa to prawidłowo. if (keyboard_check_pressed(vk_enter))//Zwiększyć ten indeks o jeden, jeśli naciśne Enter index++; if (index == sprite_get_number(spr_ilustracja4)) { // Slajd kończy się, gdy osiągnie numer obrazu spr_ilustracja4 lub długość tablicy msg // to koniec } W Draw mam tak,ale to akurat jest źle.. draw_text(x+200, y+750, msg[0]); draw_sprite(spr_ilustracja1, 0, x+640, y+360); //tu poznizej tekst najezdza sie na poprzedni tekst... draw_text(x+200, y+750, msg[1]); draw_sprite(spr_ilustracja2, 0, x+640, y+360); draw_text(x+200, y+750, msg[2]); draw_sprite(spr_ilustracja3, 0, x+640, y+360); Proszę pomóżcie Mi jak to poskładać do kupy żebym mógł osiągnąć efekt jaki opisałem wyżej w poście. za wszelkie sugestie porady z góry dziękuje:-)
  9. Dzięki;-) ustawiłem sobie jeszcze migający tekst pod tekstem obrazkowym z informacją dla gracza,że aby przejść dalej to musi nacisnąć konkretny przycisk. No dobra i ostatnie do tego moje pytanie... Obecnie tekst pokazuje się razem z ilustracja..a czy jest możliwość ustawić tak ten tekst,że pokazuje się najpierw obrazek,a za moment literka po literce pokazuje się tekst? A na końcu tego tekstu pod tym tekstem pokaże się tekst w całości migajacy np "nacisnij dowolny klawisz" tak jak mając textboxa coś takiego;-)?
  10. Ok kończy się ostatnia ilustracja i tekst,ale w dalszym ciągu nie można przejść do następnego roomu step var czego_wiecej = max(array_length_1d(msg), sprite_get_number(spr_intro1)); if (index == czego_wiecej-1) // możliwe, że będziesz musiał dać też -1, czyli index == czego_wiecej-1 { // Slajd kończy się, gdy osiągnie ostanią klatkę spr_intro1 // to koniec } if (keyboard_check_pressed(vk_enter))//Zwiększyć ten indeks o jeden, jeśli naciśne Enter index+=1; if (index == sprite_get_number(spr_intro1)) //teraz możesz tego używać, bo spr_intro1 zawiera cztery klatki { // Slajd kończy się, gdy osiągnie ostanią klatkę spr_intro1 // to koniec }
  11. Dziękuje..Ze spritem ,który zawiera animacje składająca się z kilku ilustracji działa..;-) Jeszcze dwa pytania: 1.A co w przypadku,kiedy skończą się już ilustracje oraz tekst i chciałbym przejść do następnego pokoju po spełnieniu wszystkich tych warunków? 2.Jeśli ustawie w spricie animacje składającą się z tych ilustracji i dopasuje ją na cały ekran do wielkości roomu,to tekst mój jest zakryty tymi ilustracjami.. jak ustawić żeby tekst był na wierzchu? a nie za ilustracja? bo obecnie mam ustawiony room większy,a sprite z ilustracjami są wyśrodkowane a poniżej po za obrazkiem tekst jest wyświetlany.
  12. Tak mam każdy sprite oddzielnie w plikach,a nie w jednym pliku:-) Ok funkcja sprite_get_number jest tu w moim przypadku źle użyta. Przyznam szczerze,że nie znam tej funkcji co Mi podałeś array_length_1d . Próbuje dalej to złożyć,ale pogubiłem się już. Dalej Mi wyświetla Pierwszy tylko sprite czyli ilustracja1 i tekst z msg[0]
  13. Grafika wektorowa

    Dzięki Konrad za info;-) swf obsługuje bez gradientów GMS 1.4 właśnie to przetestowałem ;-)
  14. Grafika wektorowa

    Cześć wszystkim, Mam pytanie..po za grafiką rastrową którą zapisuje w formacie PNG.czy GMS 1.4 jest w stanie odtworzyć też bezproblemowo grafikę wektorową? Załóżmy miałbym sprity scenerię tła w grafice wektorowej. Sprawdzałem,że format SWF można zaimportować,a jak z innymi formatami wektorowymi?
  15. Cześć wszystkim, Mam prymitywny pasek ładowania, który opiera się na animacji sprita...która jest zdefiniowana w evencie Create,ale to nie jest dobre rozwiązanie.Używam go w Splash screen. Czy ktoś z was ma przykład bardziej złożonego paska loading bar(np wskaźnik w procentach), który ładuje się a po załadowaniu przechodzi do kolejnego roomu? Z góry dziękuje.
  16. Cześć wszystkim, Zastanawiam się,czy można w GMS 1.4 wrzucić gotową animację(wcześniej przygotowaną w innej aplikacji),która będzie intrem gry.Jest taka możliwość? Czy GMS jest wstanie odtworzyć animacje? jeśli tak to w jakim formacie powinna być ona zapisana?
  17. Dzięki za odpowiedź Gnysku. Kurcze szkoda:-(
  18. Dzięki Konrad;-) podejmę odpowiednie kroki;-)
  19. Cześć wszystkim, Mam takie pytanie, Chciałbym zastrzec nazwę swojej gry jak i scenariusz do gry oraz logo firmy w jaki sposób to zrobić? Co do loga to rozumiem,że w w urzędzie patentowym? Jak nabyć prawa autorskie do swojej gry?
  20. Cześć wszystkim, Próbuje rozwiązać problem z nadpisującym się wynikiem do highscore po ukończeniu gry. Wygląda to tak,że cały czas jest tylko jeden wpis,a powinno być top 10 najlepszych wyników. Dziwna sytuacja...bo np jeśli zapisze grę i załaduje z load game gre i nastepnie jak skończe grę i nastąpi zapis do highscore to tworzy się niżej nowy rekord zapisu... Tylko dlaczego przy wyborze gry od nowa nadpisuje się rekord w highscore? Nie będę tu wszystkiego wklejał żeby nie robić bałaganu. obj_game_controller step if (global.life <= 0) { if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 120; // 150 to 5 sekund } } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[| ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[?"score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } } obj_highscore create global.pScore=0 globalvar highscores; highscores=ds_list_create() //Wczytaj punkty z dysku var f=file_text_open_read("highscore.dat") if(f>-1) { var s=file_text_read_string(f) //show_debug_message(s) s=json_decode(s) if(s!=-1 && ds_exists(s, ds_type_map) && ds_map_exists(s,"default")) { var m=s[?"default"]; for(var _i=0; _i<ds_list_size(m); _i++) { if(ds_exists(m[|_i], ds_type_map)) { var _m=ds_map_create(); ds_map_copy(_m, m[|_i]) ds_list_insert(highscores, _i, _m) ds_list_mark_as_map(highscores, _i) } } } ds_map_destroy(s) file_text_close(f) } scrypt score_add ///score_add(name,score) if(ds_exists(highscores, ds_type_list)) { var m=ds_map_create(); m[?"name"]=argument0 m[?"score"]=argument1 ds_list_add(highscores, m) ds_list_mark_as_map(highscores, ds_list_size(highscores)-1) score_sort() if(ds_list_size(highscores)>10) { ds_list_delete(highscores,10) } }
  21. Maska kolizji ataku bohatera

    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.
  22. Maska kolizji ataku bohatera

    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;
  23. Maska kolizji ataku bohatera

    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:/
  24. Maska kolizji ataku bohatera

    dodanie takiego warunku też nic nie daje if image_index = 89 then image_speed=0;
  25. Maska kolizji ataku bohatera

    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; }
×