pankracy Opublikowano 19 Czerwca 2019 Udostępnij Opublikowano 19 Czerwca 2019 Mam pytanie: Mam w grze save/load game zbudowany na podstawie list = ds_list_create(); problem w tym,że nie widzę skryptu w kodzie. wiem,że zapis gry następuje do pliku save.dat. ten plik tez znalazłem jest w moim przypadku w C:\Users\laptop\AppData\Local\Moja gra Prawdopodobnie są gdzieś dwa skrypty w kodzie jeden generuje plik save.dat a drugi Save.dat z dużej litery. Jest jakiś sposób w GMS żeby wyszukać te skrypty lub po funkcji ds_list_create? Save game działa,ale kiedy wychodzę z gry przestaje działać.Wiem co powoduje problem i wiem jak to naprawić..tylko muszę zlokalizować w swoim kodzie te skrypty od save i load. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 19 Czerwca 2019 Udostępnij Opublikowano 19 Czerwca 2019 ds_list - są to skrypty wbudowane, możesz je znaleźć w dokumentacji game makera Jeśli masz jakieś skrypty zewnętrzne od kogoś, to zapewne są w zakładce skrypty. A jak nie tam, no to sam musiałeś je gdzieś wkleić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 19 Czerwca 2019 Autor Udostępnij Opublikowano 19 Czerwca 2019 nie ma..przeszukałem wszystkie skrypty w grze... dobra to są wbudowane..kurcze...nie dobrze..bo muszę jedną rzecz dodać,bo brak tej rzeczy powoduje problemy załadowaniem gry. Tylko dziwna sytuacja..bo jednak save game działa wszystko zapisuje nawet jak mam mniejszą ilość energii,ale jak wyjdę już z gry i włączę ją z powrotem i wybiorę load game to wywala błąd...ale jak mówię ten błąd jestem wstanie ogarnąć,bo odwołuje się do jednego ze skryptów od textboxa...Wystarczy właśnie odszukać te nie istniejące skrypty które tworzą pliki save.dat i Save.dat z dużej litery i zainicjować tam w kodzie ten skrypt i będzie działać. tu mam też info,że odczytuje zapis gry to z pliku save.dat obj_menu step if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected=0) { room_goto(rm_poziomtrudnosci) } else if(selected=1) { if(file_exists("save.dat")){ game_load( "Save.dat" ); } else { show_message("Cannot find save.dat file. Please start a new game.");//nie odnaleziono pliku } audio_stop_sound (dzwiek_menu_glowne_gry); } else if(selected=2) { room_goto(rm_highscore) } else if(selected=3) { room_goto(rm_options) } else if(selected=4) { room_goto(rm_credits) } else if(selected=5) { game_end() } } obj_save_game Create licznik=x/14; checked = false; //sprawdzenie list = ds_list_create(); //lista zachowujaca stan gry! saveInfo=false; //informacja o zachowaniu gry saveInfoTime=3; //infroamcja o czasie zachowania gry Kolizja z obj_player if( !checked ) { checked = true; game_save("Save.dat"); //gre zachowywana pod nazwa pliku Save.dat if (!saveInfo) { saveInfo=true; audio_play_sound(dzwiek_checkpointisave, 1, false); alarm[0]=saveInfoTime*fps; //czas * ilosc FPS prosty wzor do zachowania stanu gry } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 19 Czerwca 2019 Administratorzy Udostępnij Opublikowano 19 Czerwca 2019 Ale co ma wspólnego ds_create z problemem, że to przeszkadza w modyfikacji kodu? Sprawdź w dokumentacji co ta funkcja robi i wtedy dopiero na nią narzekaj. Bo ona nie ma nic wspólnego z save. Służy do stworzenia listy z danymi (taka tablica w sumie). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 21 Czerwca 2019 Autor Udostępnij Opublikowano 21 Czerwca 2019 Masz rację Gnysek..ds_create nie ma nic wspólnego z zapisem gry. Spojrzałem dokładnie na kod i mam taki standardowy zapis gry który zapisuje się do pliku save.dat. Sprawdziłem ścieżkę dostępu do projektu w systemie Windows i po zapisie gry ten plik tam się znajduje. Tylko problem polega na tym,że zapis i odczyt gry działa dopóki nie wyjdę całkowicie z gry. Kiedy próbuje załadować grę to wywala mi taki niżej komunikat. Uprościłem,żeby nie wklepywać tu bezmyślnie setki linijek kodu;-) Widać,że odwołuje się to do Mojego skryptu textboxa. Jak to naprawić? takie są dwa błędy 1. ERROR in action number 1 of Step Event0 for object obj_player: Data structure with index does not exist. at gml_Script_no_text (line 6) - if ( ds_queue_empty(global.textq) and global.text_get=true ) ############################################################################################ -------------------------------------------------------------------------------------------- stack frame is gml_Script_no_text (line 6) called from - gml_Object_obj_player_StepNormalEvent_1 (line 51) - if no_text() //teraz Bohater stoi jak jest odwatrzana sekwencja tekstowa textboxa 2. ___________________________________________ ############################################################################################ ERROR in action number 1 of Step Event0 for object obj_text: Data structure with index does not exist. at gml_Object_obj_text_StepNormalEvent_1 (line 1) - if not ds_queue_empty(global.textq) and global.text_get=true ############################################################################################ -------------------------------------------------------------------------------------------- stack frame is gml_Object_obj_text_StepNormalEvent_1 (line 1) obj_text step if not ds_queue_empty(global.textq) and global.text_get=true //jezeli [kolejka] nie jest pusta i mozna [pobrac tekst] { global.text_get=false;//wylacz pobieranie tekstu, aby funkcja sie juz nie wywolala, dopuki znowu nie bedzie true text=ds_queue_dequeue(global.textq);//pobierz tekst z kolejki step=1;//ustaw zadanie na jeden leght=0; } //KROK 1 if step=1 { //zmniejszamy przeswitywalnosc az do max. widocznosci (1) if alpha<1 then alpha+=0.1 else { //przeswitywalnosci juz nie ma, zatem skoncz wykonywanie tego skryptu alpha=1; step=2; } } //KROK 2 if step=2 { if leght<string_length(string(text)) then leght += 1; // Mozesz zmienic predkosc "drukowania" testu dodajac inna liczbe do zmiennej leght } //KROK 3 if step=3 { //teraz zwiekszaj przeswitywalnosc az do znikniecia (0) if alpha>0 then alpha-=0.1 else { //przeswituje juz tak ze bardziej nie moze alpha=0; text=''; global.text_get=true;//ustaw, ze mozna juz pobierac tekst step=0; } } obj_player step if no_text() //teraz bohater stoi jak jest odwatrzana sekwencja tekstowa textboxa { /// } skrypt no_text //zwraca true, jezeli nie ma juz zadnego tekstu do wyswietlenia if ( ds_queue_empty(global.textq) and global.text_get=true ) then return true else return false; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 21 Czerwca 2019 Udostępnij Opublikowano 21 Czerwca 2019 "Data structure with index does not exist." Tu jest cały problem. Jeśli ds_queue_empty nie istnieje, to obj_text nie ma na czym pracować, a następnie obj_player nie ma z czego sczytać zmiennej. Przed wczytaniem sejwa, zainicjuj gdzieś tą tablice ds_queue_empty. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 21 Czerwca 2019 Autor Udostępnij Opublikowano 21 Czerwca 2019 Czy tą tablice ds_queue_empty mam stworzyć w dowolnym obiekcie w create? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 21 Czerwca 2019 Udostępnij Opublikowano 21 Czerwca 2019 Gdzieś nie, tak żeby obj_text miał do niego dostęp przy wczytywaniu sejwa. I musisz dać jakiegoś ifa, że jak queue jest puste (size == 0) to nie ma obj_text niczego sczytywać i obj_player tak samo Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 21 Czerwca 2019 Autor Udostępnij Opublikowano 21 Czerwca 2019 kurcze to nie wiem,gdzie dać ten warunek skoro nie w nowym obiekcie.. może jakiś skrypt utworzyć który by startował razem z load game i tam umieścić ten warunek??? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 21 Czerwca 2019 Udostępnij Opublikowano 21 Czerwca 2019 No niby jest to jakiś sposób, ale... spróbuj może najpierw zrobić ten warunek w obiekcie, do którego ma się odwoływać, czyli obj_text 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 not ds_queue_empty(global.textq) and global.text_get=true //jezeli [kolejka] nie jest pusta i mozna [pobrac tekst] { global.text_get=false;//wylacz pobieranie tekstu, aby funkcja sie juz nie wywolala, dopuki znowu nie bedzie true text=ds_queue_dequeue(global.textq);//pobierz tekst z kolejki step=1;//ustaw zadanie na jeden leght=0; } //KROK 1 if step=1 { //zmniejszamy przeswitywalnosc az do max. widocznosci (1) if alpha<1 then alpha+=0.1 else { //przeswitywalnosci juz nie ma, zatem skoncz wykonywanie tego skryptu alpha=1; step=2; } } //KROK 2 if step=2 { if leght<string_length(string(text)) then leght += 1; // Mozesz zmienic predkosc "drukowania" testu dodajac inna liczbe do zmiennej leght } //KROK 3 if step=3 { //teraz zwiekszaj przeswitywalnosc az do znikniecia (0) if alpha>0 then alpha-=0.1 else { //przeswituje juz tak ze bardziej nie moze alpha=0; text=''; global.text_get=true;//ustaw, ze mozna juz pobierac tekst step=0; } } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 21 Czerwca 2019 Autor Udostępnij Opublikowano 21 Czerwca 2019 Ok Simianie sprawdzę;-) dzięki Ale spójrz są dwa błędy..jeden to skrypt odwołuje się do obj_text,a drugi do obj_player;-) I najpierw pojawia się błąd z obj_player ,a potem dopiero z obj_tekst Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 21 Czerwca 2019 Udostępnij Opublikowano 21 Czerwca 2019 to zrób na odwrót Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 21 Czerwca 2019 Autor Udostępnij Opublikowano 21 Czerwca 2019 Ok ten błąd z obj_textem zniknął,ale pozostał z obj_playerem i tu jest w miejscu: Tu fragment tych dwóch błędów jakie pozostały. if no_text() //teraz bohater stoi jak jest odwatrzana sekwencja tekstowa textboxa { /// } 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; } Więcej już błędów nie wywala tylko te wyżej: cały step Bohatera w którym są te dwa błędy wygląda tak: obj_player STEP ///ustawienia ruchu Anatola // gdy anatol 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 Anatol 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; } ///TU JEST TEN BLAD PIERWSZY 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 } ///TU JEST TEN BLAD DRUGI if no_text() //teraz Anatol stoi jak jest odwatrzana 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; //Punkt respawnu w miejscu ostatniego skoku //spawnX = x; //spawnY = y; //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; } //Podwojny skok /* if czasSkoku > 0 && keyboard_check_pressed(kJump) && wPowietrzu == true { vspd = -10-sign(pwrupJmp*3); silaSkoku = 0; czasSkoku--; audio_play_sound(dzwiek_skoku_anatolka, 1, false); //odtwarzamy dzwiek przy skakaniu }*/ 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){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) {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; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 21 Czerwca 2019 Udostępnij Opublikowano 21 Czerwca 2019 Daj treść tych błędów, bo nie wiem w czym problem. 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 no_text() //teraz bohater stoi jak jest odwatrzana sekwencja tekstowa textboxa { /// } } } PS: kopiowanie bezmyślnie kodu i wklejanie do swojego projektu nie nauczy Cię wiele :/ trzymam kciuki za skończenie twojego magnum opus ale później radziłbym powtórzyć podstawy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 22 Czerwca 2019 Autor Udostępnij Opublikowano 22 Czerwca 2019 Wiem Simianie,Dlatego powoli biorę się za porządki w kodzie jak i przeanalizowanie po kolei w każdym obiekcie wszystkich funkcji kodu. Czytam już sobie samouczek wbudowany w GMS. A kciuki się bardzo przydadzą;-) Nie długo udostępnię nowe grafiki z gry. A te dwa ostatnie błędy jak wspomniałem wcześniej,to tyczą się wyłącznie obj_player poniżej ich treść 1. ############################################################################################ ERROR in action number 1 of Step Event0 for object obj_player: Data structure with index does not exist. at gml_Script_no_text (line 6) - if ( ds_queue_empty(global.textq) and global.text_get=true ) ############################################################################################ -------------------------------------------------------------------------------------------- stack frame is gml_Script_no_text (line 6) called from - gml_Object_obj_player_StepNormalEvent_1 (line 50) - if no_text() //teraz Bohater stoi jak jest odwatrzana sekwencja tekstowa textboxa 2. ############################################################################################ ERROR in action number 2 of Step Event2 for object obj_player: Data structure with index does not exist. at gml_Script_no_text (line 6) - if ( ds_queue_empty(global.textq) and global.text_get=true ) ############################################################################################ -------------------------------------------------------------------------------------------- stack frame is gml_Script_no_text (line 6) called from - gml_Object_obj_player_StepEndEvent_2 (line 3) - if(instance_number(obj_napis_plansz)=0 && no_text()) { 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(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 Anatol stoi jak jest odwatrzana 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; //Punkt respawnu w miejscu ostatniego skoku //spawnX = x; //spawnY = y; //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; } //Podwojny skok /* if czasSkoku > 0 && keyboard_check_pressed(kJump) && wPowietrzu == true { vspd = -10-sign(pwrupJmp*3); silaSkoku = 0; czasSkoku--; audio_play_sound(dzwiek_skoku_anatolka, 1, false); //odtwarzamy dzwiek przy skakaniu }*/ 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){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) {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; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 22 Czerwca 2019 Udostępnij Opublikowano 22 Czerwca 2019 Error1: //już Ci go dałem wyżej ._. ///TU JEST TEN BLAD DRUGI 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 no_text() //teraz Anatol stoi jak jest odwatrzana sekwencja tekstowa textboxa { /// dodaj reszte kodu Error2 jest wykonany w endstepie, ale prawdopodobnie robisz te same ify co powyżeć, zagnieżdzając w nie tego ifa z błędem stack frame is gml_Script_no_text (line 6) called from - gml_Object_obj_player_StepEndEvent_2 (line 3) - if(instance_number(obj_napis_plansz)=0 && no_text()) { Miej na uwadze to, że ta naprawa błędu może nie być zbyt dobra, bo to może być pominięcie ważnych linijek kodu dla załadowania się gry (może, nie musi). Wydaje mi się, że powinieneś jakoś zainicjować ds_queue_empty(global.textq) przed załadowaniem gry, żeby mógł sobie doczytać wszystko. Aczkolwiek to tylko domysły, bo to wszystko zależy jak wygląda cały kod z nimi związane, a tego raczej nie ogarnę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 22 Czerwca 2019 Autor Udostępnij Opublikowano 22 Czerwca 2019 Wyeliminowane są praktycznie wszystkie już błędy,ale jak załaduje grę z load game,to Bohater chodzi w miejscu..I nie mogę nic z nim zrobić... End step już ogarnięty faktycznie tam był jeden z błędów. wstawiłem te warunki w stepie bohatera tam gdzie był ten problem.Zaznaczyłem je są zaraz na początku kodu. A powiedz mi,bo myślę nad rozwiązaniem takim,żeby wstawić te warunku przed załadowaniem pierwszej planszy... Np jest pusty pokój gdzie są te warunki i z pustego pokoju przechodzi do planszy świata pierwszego..Tylko wtedy warunek musiałby wyglądać inaczej... 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 { /////////////////////////////////////////////////////////////////////////////////////////////////////////TU JEST WSTAWIONY WARUNEK! 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; } }//dodane }//dpdame }//dodany 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 } /////////////////////////////////////////////////////////////////////////////////////////////////////////I TU JEST WSTAWIONY WARUNEK! 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 no_text() //teraz Anatol stoi jak jest odwatrzana 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; //Punkt respawnu w miejscu ostatniego skoku //spawnX = x; //spawnY = y; //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; } //Podwojny skok /* if czasSkoku > 0 && keyboard_check_pressed(kJump) && wPowietrzu == true { vspd = -10-sign(pwrupJmp*3); silaSkoku = 0; czasSkoku--; audio_play_sound(dzwiek_skoku_anatolka, 1, false); //odtwarzamy dzwiek przy skakaniu }*/ 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; } } } } }//dodany //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){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) {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(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 && 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; if vspd <= -1 { image_index = 0; } else if vspd >= 1 { image_index = 2; } else { image_index = 1; } } 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 = 14-(zegarAtaku); zegarAtaku -= 1; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_index = 6-(zegarAtaku); zegarAtaku -= 1; } 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; } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 22 Czerwca 2019 Autor Udostępnij Opublikowano 22 Czerwca 2019 Może lepiej te warunek wrzucić do pokoju przed rozpoczęciem gry co? mam pokój inicjowanie a w nim obj_inicjowanie w create /*ten obiekt sluzy jedynie za inicjacje pewnych zmiennych, ktore powinny byc zdefiniowane zanim cokolwiek jeszcze wydarzy sie w grze, dlatego tez dla 100% pewnosci, ze zaden inny obiekt nie uzyje tych wartosci zanim ich nie ustalimy, ustawilem go w pierwszym pokoju i dalem mu w create wywolanie skryptu scr_ini(); ktory wposmniane zmienne ustawia a nastepnie przechodzi do drugiego pokoju pamietaj! poza tym obiektem w roomie nie moze byc nic innego, a przed nim zaden obiekt nie moze zostac stworzony aby miec pewnosc, ze nie odwola sie do zmiennych ktore zostana za chwilke ustawione !*/ scr_ini(); //to skrypt od textboxa room_goto(roo_world1_1);//to moja plansza pierwsza swiata scr_ini //po pelen opis dzialanie tego skryptu zerknij do obiektu obj_inicjowanie global.textq=ds_queue_create();//kolejka z tekstem global.text_get=true;//czy mozemy pobrac nastepny tekst, wiecej w obj_text Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Czerwca 2019 Udostępnij Opublikowano 23 Czerwca 2019 Kilka zasad rozwiązywania problemu: 1. Kombinuj 2. Jeśli masz jakiś pomysł, nie pytaj na forum czy jest dobry, tylko go wypróbuj. 3. Rób backupy, jeśli zmieniasz dużo kodu i boisz się, że później nie wrócisz do punktu startowego, jeśli coś nie wyjdzie 4. Ogólnie rób backupy 5. Co robi funkcja no_text()? Po if'ie z tą funkcją masz napisany cały kod na poruszanie się, a skoro global.textq nie istnieje, to no_text() się nie wykonuje, a z tym cały kod chodzenia i animacji Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Czerwca 2019 Autor Udostępnij Opublikowano 23 Czerwca 2019 no_text bohater na czas wyświetlania tekstu z textboxa jest zatrzymany stoi w miejscu:-) Nie ma już błędów,ale jak załaduje grę z save to mój bohater chodzi w miejscu...nie można nim ruszać..w złym miejscu musiałem dać te warunki:-( w opisie dałem przy dodanych nawiasach klamrowych komentarz }//dodane.to są nawiasy klamrowe do tych warunków dodanych. obecnie w step i w end step obj_player mam tak dane te warunku 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; } }//dodane }//dpdame 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(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 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; //Punkt respawnu w miejscu ostatniego skoku //spawnX = x; //spawnY = y; //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; } //Podwojny skok /* if czasSkoku > 0 && keyboard_check_pressed(kJump) && wPowietrzu == true { vspd = -10-sign(pwrupJmp*3); silaSkoku = 0; czasSkoku--; audio_play_sound(dzwiek_skoku_anatolka, 1, false); //odtwarzamy dzwiek przy skakaniu }*/ 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 }//dpdane //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){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) {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(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 && 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; if vspd <= -1 { image_index = 0; } else if vspd >= 1 { image_index = 2; } else { image_index = 1; } } 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 = 14-(zegarAtaku); zegarAtaku -= 1; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_index = 6-(zegarAtaku); zegarAtaku -= 1; } 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; } } }//dodane }//dodane Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Czerwca 2019 Udostępnij Opublikowano 23 Czerwca 2019 zapodaj cały kod, który mieści skrypt no_text(), bo jestem pewien, że zwraca true albo false i chce wiedzieć, jakie argumenty za tym stoją Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Czerwca 2019 Autor Udostępnij Opublikowano 23 Czerwca 2019 skrypt no_text //zwraca true, jezeli nie ma juz zadnego tekstu do wyswietlenia if ( ds_queue_empty(global.textq) and global.text_get=true ) then return true else return false; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Czerwca 2019 Udostępnij Opublikowano 23 Czerwca 2019 Okej, trochę mi to zajęło, przez organizacje twojego kodu, który jest pisany makabrycznie, bez żadnego schematu. Musisz trochę nad tym popracować, bo wtedy łatwiej wyłapać błędy. Na początek, zmieniamy skrypt no_text() //zwraca true, jezeli nie ma juz zadnego tekstu do wyswietlenia 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 ( ds_queue_empty(global.textq) and global.text_get=true ) { return true; } else { return false; } } else return false; } else return false; i zmieniony cały step (zobacz sobie, jak on teraz wygląda. Widać, który if jak zagnieżdżony w którym ifie. Widać gdzie dana klamra otwiera kod a gdzie go zamyka. Nigdy nie możesz mieć dwóch klamer zamykających w tej samej linii, w tym samym pionie. ///@desc pankracy ///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; } }//dodane }//dpdame 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 } } // *********************************************************************************************************************************** /// ------------------ tutaj tak jak mowiłem, że mogą być konsekwencję naprawiania tego błedu na skróty. Jestem pewien, że no_text() * // ------------------- zwraca wartość true albo false, jeśli tekst jest albo go nie ma. Tutaj tego nie sprawdza, bo nie ma w ogóle * // ------------------- zmiennejpozwalającej to sprawdzić, dlatego omija calutki kod * // ------------------- ROZWIĄZANIE: przerobienie funkcji no_text() * // *********************************************************************************************************************************** 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; //Punkt respawnu w miejscu ostatniego skoku //spawnX = x; //spawnY = y; //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; } //Podwojny skok /* if czasSkoku > 0 && keyboard_check_pressed(kJump) && wPowietrzu == true { vspd = -10-sign(pwrupJmp*3); silaSkoku = 0; czasSkoku--; audio_play_sound(dzwiek_skoku_anatolka, 1, false); //odtwarzamy dzwiek przy skakaniu }*/ 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; } Miejmy nadzieje, że się nigdzie nie kopnąłem. PS: trochę się te nawiasy porozjeżdżały, gdy je wkleiłem na forum (?) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Czerwca 2019 Autor Udostępnij Opublikowano 23 Czerwca 2019 jeszcze chodzi w miejscu,ale obstawiam,że to wina kodu w End Step obj_player End Step ///Sprity 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 && 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; if vspd <= -1 { image_index = 0; } else if vspd >= 1 { image_index = 2; } else { image_index = 1; } } 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 = 14-(zegarAtaku); zegarAtaku -= 1; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_index = 6-(zegarAtaku); zegarAtaku -= 1; } 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; } } }//dodane }//dodane Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Czerwca 2019 Udostępnij Opublikowano 23 Czerwca 2019 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; if vspd <= -1 { image_index = 0; } else if vspd >= 1 { image_index = 2; } else { image_index = 1; } } 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 = 14-(zegarAtaku); zegarAtaku -= 1; } if zegarAtaku > 0 && atakBierzacy == 1 { sprite_index = spr_player_shoot; image_index = 6-(zegarAtaku); zegarAtaku -= 1; } 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; } } Chodzi w miejscu, znaczy, że chodzi bez animacji, tak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Czerwca 2019 Autor Udostępnij Opublikowano 23 Czerwca 2019 Nie nie... nie mogę nim poruszać... on stoi i animacja chodzenia jest aktywna cały czas przebiera nogami.Nie reaguje na przyciski żadne..nie mogę chodzić skakać itp.. To tak wygląda jakbyś kogoś trzymał w miejscu,a ktoś nogami tylko przebierał w miejscu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Czerwca 2019 Udostępnij Opublikowano 23 Czerwca 2019 albo robisz w if'ie if(!no_text()) {} albo zmień skrypt no_text() aby zwracał wynik odwrotnie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 23 Czerwca 2019 Udostępnij Opublikowano 23 Czerwca 2019 Zmień tu warunki. Co prawda, będzie to działać odwrotnie do nazwy funkcji, ale może o to chodzi. //zwraca true, jezeli nie ma juz zadnego tekstu do wyswietlenia 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 ( ds_queue_empty(global.textq) and global.text_get=true ) { return false; } else { return true; } } else return true; } else return true; edit: Ok, czyli nazwa funkcji jest odwrotna do opisu, czyli powinno to działać edit2: A nie czekaj, opis do nazwy się zgadza... coś mi dzisiaj mózg szwankuje Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Czerwca 2019 Autor Udostępnij Opublikowano 23 Czerwca 2019 Teraz jak załaduje grę,to bohater fakt chodzi wszystko niby normalnie robi wykonuje..ale kiedy zginę i zacznę planszę od nowa,to stoi w miejscu i nie można nim ruszać. Natomiast jak wezmę zamiast load game nowa gra to napis z texboxa jak się pojawia to bohater powinien stać w miejscu,a teraz można nim chodzić i kiedy tekst sie skończy bohater zamarza tzn nic już nie można z nim zrobić;-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 23 Czerwca 2019 Autor Udostępnij Opublikowano 23 Czerwca 2019 Hmmm..czyli to nie w tym problem;-) dla pewności tu cały kod jeszcze textboxa... są tylko trzy małe skrypty. scr_ini //po pelen opis dzialanie tego skryptu zerknij do obiektu obj_inicjowanie global.textq=ds_queue_create();//kolejka z tekstem global.text_get=true;//czy mozemy pobrac nastepny tekst, wiecej w obj_text add_text //dodaje tekst do kolejki var text; text=argument0; if !instance_exists(obj_text) then instance_create(0,0,obj_text); //poniewaz obj rozmowa nie ma opcji persistent (dla bezpieczenstwa) //tworzymy go gdy nie ma go na planszy ds_queue_enqueue(global.textq,text); i nieszczęsny no_text //zwraca true, jezeli nie ma juz zadnego tekstu do wyswietlenia 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 ( ds_queue_empty(global.textq) and global.text_get=true ) { return true; } else { return false; } } else return false; } else return false; 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ę