Skocz do zawartości

pankracy

Użytkownicy
  • Postów

    320
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Odpowiedzi opublikowane przez pankracy

  1. 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;
        

     

  2. 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
    }
    }

     

  3. 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.

  4.  

    Przepraszam...muszę trochę kodu wkleić;-) żeby to objaśnić;-)

    Kolizje z obj_Player mam następujące:

     

    par_hazzard -To obiekt który po zetknięciu bohatera z tym obiektem powoduje automatycznie śmierć...(np kolce itp)

    Jest on ustawiony w kolizji z moim bohaterem czyli obj_player

     

    obj_player kolizja z par_hazzard

     

    ///smierc natychniastowa po dotknieciu obiektu hazard
    instance_destroy();
    instance_create(x,y,obj_player_ginie)
    with (instance_create(x,y,obj_entity_die)) {
     sprite_index = spr_player_die02;
     image_xscale = other.image_xscale;
     respawn = true;
     respawnObject = obj_player;
     respawnX = spawnX;
     respawnY = spawnY;
     physics = false;
     health=-100; 
     image_speed=(image_number/room_speed)/ 2//Czas zanim anatol sie odrodzi
     global.life -=1;
     audio_play_sound(dzwiek_anatol_ginie, 1, false);
     image_alpha=0
    }

     

    kolejna kolizja:

    obj_player kolizja z par_obrazenia

    Tutaj jak sami widzicie poniżej w zależności od wybranego poziomu Przeciwnik w kontakcie z bohaterem zabiera mu energię HP.

     

    ///Poziom trudnosci i obrazenia jakie okreslone obiekty dziedziczace z tego rodzica zadaja Bohaterowi
    
    
    if(global.difficulty == "easy")
    if global.zegarObrazen<0 
    {
    global.hp-=17
    global.zegarObrazen=room_speed*2
    }
    
    if(global.difficulty == "medium")
    if global.zegarObrazen<0 
    {
    global.hp-=25
    global.zegarObrazen=room_speed*2
    }
    
    if(global.difficulty == "hard")
    if global.zegarObrazen<0 
    {
    global.hp-=34
    global.zegarObrazen=room_speed*2
    }

     

    i ostatnia kolizja bohatera obj_player z par_attack

    Ta kolizja jest przypisana do wrogów z moim bohaterem.

     

    obj_player kolizja z par_attack

     

    ///Obrazenia
    
    if other.owner == par_enemy && zegarObrazen == 0 {
     global.hp -= other.sila;
     zegarObrazen = room_speed/2;
    }

     

     

     

    Problem polega na tym,że mam w dwóch stepach w jednym

      w obj_player global.hp <= 0

    oraz w global_game_controller w stepie mam global.life = 0

     

     

    Gnysek wspomniał,że

     

    if (global.life > 0) 
    {
    global.life -=1;
    }

    Powinien znajdować się u Bohatera w kolizji z obiektem,który ma dawać obrażenia i chyba analogicznie tak samo obiekt który ma zabierać energię a jak energia się skończy zabierać życie.

    Tak was zrozumiałem zabieranie energii i odjęcie życia oraz odjęcie życia w zetknięciu z obiektem który nie zabiera energii tylko od razu życie nie może być w stepie tylko w kolizji bohatera z danym obiektem,który ma tą energię zabrać a następnie życie lub od razu życie.

    Mam rozumieć,że mam wywalić jeden i drugi kod ze step z tych dwóch obiektów i wrzucić to do kolizji gracza z obiektami zadającymi obrażenia?

    Bohater kiedy zginie i skończą mu się życia nie powinien się znowu odradzać na początku planszy chce to wyeliminować..naprawić to.

    Gracz ma 0 żyć,to koniec gry nie odradza się i już.

    Przepraszam,że tak po łebkach to wam tłumaczę,ale sam dochodzę powoli do pewnych rzeczy.Doceniam wasz wkład waszą wiedzę...nie każdy od razu zbudował Rzym:)

     


     

     tak to wygląda:

     

    obj_player

     

    step

    //Bohater dostajac obrazenia to miga
    //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1
    //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia
    
    
    global.zegarObrazen-=1
    if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time)
    else image_alpha=1;
    
    
    if (global.hp <= 0)
    {
    global.life--
    
     instance_destroy();
     instance_create(x,y,obj_player_ginie)
     with (instance_create(x,y,obj_entity_die)) {
      sprite_index = spr_player_die01;
      image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi
      image_xscale = other.image_xscale;
      respawnObject = obj_player;
      respawnX = spawnX;
      respawnY = spawnY;
      physics = true;
      respawn = true; 
      image_alpha=0
      
    
     }
     audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie
    }
    

    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] = 60; // 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);
        }
    }

     

  5. Konrad,

     

    Nie mam w stepie takiej linijki,bo Gnysek Mi to już wyjaśnił,że ten kod nie może być użyty w stepie tylko w kolizji z obiektem czyli np z wrogiem lub dowolny obiekt ,który daje mi obrażenia..

    Musiałbym stworzyć jakiegoś parenta dla wszystkich obiektów,które dają obrażenia bohaterowi i tam użyć tego rozwiązania

    Chłopaki ja wam bardzo dziękuje za pomoc;-) wiem,że staracie się Mi pomóc...naprawdę to doceniam...:):)

    if (global.life > 0) 
    {
    global.life -=1;
    }
  6. Hehe jest to samo zaraz wychodzi z gry i pojawia się plansza game over;-)

    Coś Ty cały kod gry by się tu nie zmieścił;D

     

    Kurcze mówicie,że global.life wykonuje się co jedna klatkę gry...

     

    znalazłem kod w grze naszego kolegi Top Hat i podobnie jak ja ma w stepie bohatera takie rozwiązanie:

     

    obj_player z gry Top Hat

     

    step

     

    global.czasniezniszczalnosci-=1
    if global.czasniezniszczalnosci>0 image_alpha=0.7+lengthdir_x(0.3,current_time)
    else image_alpha=1
    //dead
    if global.graczhp<0 
    {
    instance_destroy()
    instance_create(x+0,y+0,obj_graczdead)
    global.zycia-=1
    }
    //dead2
    if global.graczhp=0 
    {
    instance_destroy()
    instance_create(x+0,y+0,obj_graczdead)
    global.zycia-=1
    }

    a w kolizji z wrogami obj_player Top hat ma tak

     

    if global.czasniezniszczalnosci<0 
    {
    global.graczhp-=1
    global.czasniezniszczalnosci=room_speed*2
    instance_create(x+0,y+0,obj_oberwalefekt);
    sound_play(snd_oberwal)
    }

    i na końcu w Create bohatera Top Hat jest tak

     

    grav = 0;
    vspd = 0;
    hspd = 0;
    st=1
    time=0
    //�ycie i co� tam
    drabina=0
    koniec=0
    skok=false
    nadrabinie=false
    //bronie
    global.graczpistol=1
    global.graczshotgun=0
    global.graczshotgunma=0
    global.czasniezniszczalnosci=0

    Dlatego teraz zgłupiałem skoro w stepie tak ma i to działa

  7. Gnysku Mam to w stepie. w kolizjach z wrogami i przeszkodami mam tylko kod na obrażenia jakie zadają bohaterowi.

    Kurcze to tak jak mówisz...dlatego mi się od razu wykonuje.

    chociaż spojrzałem w necie na kilka silników gry i widziałem np,że global.hp jest wrzucany do stepa obiektu..

     

    w kolizjach z moim bohaterem mam tak:

     

    obj_player kolizja z par_hazzard (jak spadnie na obiekty które od razu zabierają mu życia np kolce)

    tu jest global.life -=1 :-) było od początku

     

    ///smierc natychniastowa po dotknieciu obiektu hazard
    instance_destroy();
    instance_create(x,y,obj_player_ginie)
    with (instance_create(x,y,obj_entity_die)) {
     sprite_index = spr_player_die02;
     image_xscale = other.image_xscale;
     respawn = true;
     respawnObject = obj_player;
     respawnX = spawnX;
     respawnY = spawnY;
     physics = false;
     health=-100; 
     image_speed=(image_number/room_speed)/ 2//Czas zanim anatol sie odrodzi
     global.life -=1;
     audio_play_sound(dzwiek_anatol_ginie, 1, false);
     image_alpha=0
    }

     

    obj_player kolizja z par_obrazenia

     

    ///Obrazenia
    
    if other.owner == par_enemy && zegarObrazen == 0 {
     global.hp -= other.sila;
     zegarObrazen = room_speed/2;
     }

     

    obj_player kolizja z par_enity który dziedziczy z par_enemy

     

    ///poziom trudnosci i obeazenia jakie zadaje Wrog bohaterowi na danym poziomie trudnosci
    
    
    if(global.difficulty == "easy")
    if global.zegarObrazen<0 
    {
    global.hp-=17
    global.zegarObrazen=room_speed*2
    }
    if(global.difficulty == "medium")
    if global.zegarObrazen<0 
    {
    global.hp-=25
    global.zegarObrazen=room_speed*2
    }
    
    if(global.difficulty == "hard")
    if global.zegarObrazen<0 
    {
    global.hp-=34
    global.zegarObrazen=room_speed*2
    }

     

    obj_player

    Step

     

    global.zegarObrazen-=1
    if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time)
    else image_alpha=1;
    
    
    
    
    
    if (global.hp <= 0)
    {
    global.life--
    
     instance_destroy();
     instance_create(x,y,obj_player_ginie)
     with (instance_create(x,y,obj_entity_die)) {
      sprite_index = spr_player_die01;
      image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi
      image_xscale = other.image_xscale;
      respawnObject = obj_player;
      respawnX = spawnX;
      respawnY = spawnY;
      physics = true;
      respawn = true; 
      image_alpha=0
      
    
     }
     audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie
    }
    

    No i to co wyżej obj_game_controler gdzie w stepie jest ten kod

     

    if (global.life > 0) 
    {
    global.life -=1;
    } else {
        if (can_finish == false) 
    { 
    if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            alarm[0] = 60; // 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);
        }
    }

    teraz tak jak wspomniałeś..musiałbym to wrzucić,gdzieś do kolizji jakiegoś obiektu rodzica pod którym są podpięte obiekty dziedziczące jak wrogowie pułapki itp.

     

     

  8. Napisałeś żeby warunek dać przed highscore;-)

     

    jednak efekt ten sam ;-) gra się włącza zaczynam grać i za momencik wywala mnie do menu głównego;-) dziwna sytuacja

     

    global_game_controler

     

    step

     

    if (global.life > 0) 
    {
    	global.life -=1;
    } else {
        if (can_finish == false) 
    	{ 
    	if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            alarm[0] = 60; // 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);
        }
    }

     

  9. No właśnie ten znak równości mnie trochw wybił:-)

     

    kurcze co robię nie tak: mam 0 żyć i mi odejmuje życia..nie działa to normalnie

     

    obj_game_controler

     

    step

     

    if (global.life > 0) 
     {
     
        if (can_finish == false) 
         { 
    if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            alarm[0] = 60; // 150 to 5 sekund
    }
    global.life -=1;
        } 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);
        }
    }
    
    

     

  10. Pomniejszać o jedno życie..tak też robię ale jest błąd

     

    global_game_controler

     

    Step

     

    if (global.life > 0) 
    {
    if global.life -=1;//tu jest blad 
        if (can_finish == false) {
    		if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            	alarm[0] = 150; // 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);
        }
    }

    Respawn mam tylko w tym miejscu

     

    obj_player

     

    Step

     

    //Bohater dostajac obrazenia to miga
    //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1
    //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia
    global.zegarObrazen-=1
    if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time)
    else image_alpha=1;
    
    
    
    
    
    if (global.hp <= 0)
    {
    global.life--
     instance_destroy();
     instance_create(x,y,obj_player_ginie)
     with (instance_create(x,y,obj_entity_die)) {
      sprite_index = spr_player_die01;
      image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi
      image_xscale = other.image_xscale;
      respawnObject = obj_player;
      respawnX = spawnX;
      respawnY = spawnY;
      physics = true;
      respawn = true; 
      image_alpha=0
      
    
     }
     audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie
    }

     

  11. Staram się go analizować...ale wolno Mi idzie..

     

    if global,life > 0 powoduje,że gra się włącza a za chwile ze scenerii przenosi mnie do głównego menu..

     

    obj_game_controler

     

    STEP

     

    if (global.life > 0) 
    {
        if (can_finish == false) {
    		if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            	alarm[0] = 150; // 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_player

     

    step

     

    //Bohater dostajac obrazenia to miga
    //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1
    //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia
    global.zegarObrazen-=1
    if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time)
    else image_alpha=1;
    
    
    
    
    
    if (global.hp <= 0)
    {
    global.life--
     instance_destroy();
     instance_create(x,y,obj_player_ginie)
     with (instance_create(x,y,obj_entity_die)) {
      sprite_index = spr_player_die01;
      image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi
      image_xscale = other.image_xscale;
      respawnObject = obj_player;
      respawnX = spawnX;
      respawnY = spawnY;
      physics = true;
      respawn = true; 
      image_alpha=0
      
    
     }
     audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie
    }

     

  12. Tak gvX i gvY resetują  się na 0.

    Dobrze..czyli game_end nie jest potrzebny...

     

    Wiem w czym jest problem Gnysku...

     

    Mój bohater załóżmy ma te 3 życia i po każdym życiu odradza się w pozycji początkowej mapy...Natomiast kiedy kończy się ostatnie życie to bohater zamiast zatrzymać się w miejscu w którym zginał,to znowu się odradza i zaraz następuje koniec gry..Przecież jak zginał,to nie powinien się odradzać.

     

     

    Teraz tak...respawn musiałby być na false rozumiem?po śmierci bohatera kiedy ilość żyć wynosi 0.

     

    wystarczy dodać kolejny alarm do obj_game_controler? który wyłączy odradzanie bohatera kiedy jego życia są na zero?

     

     

    obj_game_controler

     

    step

     

    if (global.life = 0) //czy tu nie powinien być albo warunek lub alarm ustawiony który sprawdzał by czy respawn jest wyłączony gracza???
    {
        if (can_finish == false) {
    		if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            	alarm[0] = 150; // 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);
        }
    }

     

  13. Czyli u mnie i tak zamyka się gra i nie potrzebne jest użycie game_end()?

    Flaga wszystko załatwia?

     

    Mój bohater jak traci życia wiadomo odradza się i wraca na początku scenerii..(użycie  respawnX  i respawnY) tak ma być,ale kiedy skończą mu się wszystkie życia to powinien w miejscu gdzie zginie zakończyć grę.

     

    ustawienia widoku mam tylko w dwóch obiektach które są cały czas na każdej planszy w grze

     

    obj_global_controller  - ten sam obiekt

     

    End step

     

    ///Wyswietlanie widoku okna gry
    if (view_wport[0] != window_get_width() || view_hport[0] != window_get_height()) && window_get_width() != 0 {
     view_wport[0] = window_get_width();
     view_hport[0] = window_get_height();
     view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0];
     surface_resize(application_surface,view_wview[0],view_hview[0]);
    display_set_gui_size(view_wport[0],view_hport[0]); //wersja podstawowa
    }

     

    obj_game_controller

     

    End step

     

    ///Widok
    if view_wview[0] != gvW || view_hview[0] != gvH {
     var tempW, tempH;
     tempW = view_wview[0];
     tempH = view_hview[0];
     
     if gvW/view_wport[0] >= gvH/view_hport[0] {
      view_hview[0] = lerp(view_hview[0],gvH,.3);
      view_wview[0] = view_hview[0]/view_hport[0]*view_wport[0];
     } else {
      view_wview[0] = lerp(view_wview[0],gvW,.3);
      view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0];
     }
     
     view_xview[0] -= (view_wview[0]-tempW)/2;
     view_yview[0] -= (view_hview[0]-tempH)/2;
    }
    
    if view_wview[0] > room_width {
     view_wview[0] = room_width;
     view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0];
    }
    if view_hview[0] > room_height {
     view_hview[0] = room_height;
     view_wview[0] = view_hview[0]/view_hport[0]*view_wport[0];
    }
    
    if instance_exists(gvObj) {
     gvX = min(max(0,gvObj.x+gvOffX-view_wview[0]/2),room_width-view_wview[0]);
     gvY = min(max(0,gvObj.y+gvOffY-view_hview[0]/2),room_height-view_hview[0]);
     
     gvOffX = 0;
     gvOffY = 0;
    }
    
    view_xview[0] = round(min(max(0,lerp(view_xview[0],gvX,.15)),room_width-view_wview[0]));
    view_yview[0] = round(min(max(0,lerp(view_yview[0],gvY,.15)),room_height-view_hview[0]));
    
    gvW = gvWStart;
    gvH = gvHStart;

     

  14. Gnysku...działa!

    wielkie dzięki...

    Chociaż wygląda to tak,że gracz ginie...i wracam na początku mapy mija te 5 sekund i przechodzi do pokoju game over lub highscore.

    A można to ustawić że jak straci wszystkie życia i jest koniec gry,to nie przenosi się na początek planszy tylko zatrzymuje się ekran w miejscu,gdzie zginał?

     

    Mam jeszcze takie pytanie do Ciebie:

    Powiedz Mi..bo rozumiem,ze nie musi być game_end() w grze żeby zakończyć ją?

    za to użyłeś zmiennej  can_finish?

    Mógłbyś mi w skrócie to wytłumaczyć;-)

     

     

  15. Nie działa dalej to samo..od razu przechodzi do pokoju game over lub jak zbiorę 500pkt to przechodzi do pokoju game over..kurcze co jest nie tak:/

    Wildze w kodzie alarm 0=-1 skoro jest już ustawiony Gnysku jak mówisz dla każdego obiektu,to po co go tu umieszczać.

     

    obj_game_controller

     

    step

     

    ///kontroler odpowiedzialny za giniecie bohatera
    
    
    if (global.life = 0) {
        if (can_finish == false and alarm[0] == -1) {
            alarm[0] = 30; // 1 sekunda
        } 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_game_controller

     

    Alarm[0] ustawiony jako nowy event i w nim poniżej kod

     

    image.thumb.png.ffc7ef1a6e78f804a2dcc262e4a4d92d.png

    can_finish = true;

     

     

     

     

    obj_game_controller

     

    create

     

    can_finish = false;

     

  16. Simian miałem evencie tak ustawione...z tym Alarm 0

    Tak alarm 0 od początku miał wartość -1

     

    Nie wiem...to tak nie działa,ale pewnie coś zwaliłem

    game_end() przecież nie mogę dać na koniec kodu,bo wtedy nie wyświetli mi się tabela wyników.

     

    obj_game_controller

     

    step

     

    if (global.life=0)
    
    {
    game_end(); 
    
    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)  
      
       if (can_finish == false) {
      alarm[0] = 30;
      } else {
      
      
          room_goto( rm_save_score );
      } 
      else //jesli nie kwalifikuje sie na top 10
      {
          room_goto( rm_game_over );
      }
    }
    else //jesli nie kwalifikuje sie do highscore
    {
    room_goto( rm_game_over );
    }
    }
    
    // w alarm 0
    can_finish = true;

    create

     

    can_finish = false;

     

  17. Gnysku,

     

    Bo usunąłem Alarm skoro nie działało to rozwiązanie,a miałem tak jak wyżej czyli;

     

    obj_game_controller

     

    STEP

     

    ///kontroler odpowiedzialny za giniecie bohatera
    if (global.life==0 and alarm[0] = -1) // wlacz kontroler gdy alarm[0] wylaczy sie (przedtem nastaw go, na odliczanie)
    {
    game_end();
    
    if(global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore
    {
      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 );
      } 
      else //jesli nie kwalifikuje sie na top 10
      {
          room_goto( rm_game_over );
      }
    }
    else //jesli nie kwalifikuje sie do highscore
    {
    	room_goto( rm_game_over );
    }

    obj_game_controller

     

    CREATE

     

    alarm[0] = -1;

    obj_player_ginie

     

    CREATE

     

    
    obj_game_controller.alarm[0] = 3*room_speed;

     

  18. Przejrzałem...nie mam nigdzie zdublowanego kodu w innym obiekcie od Highscore

     

    tylko w global_game_controller

     

    w Stepie mam nigdzie więcej

     

    ///kontroler odpowiedzialny za giniecie bohatera
    
    
    if (global.life=0)
    
    {
    game_end(); 
    
    
    
    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 );
      } 
      else //jesli nie kwalifikuje sie na top 10
      {
          room_goto( rm_game_over );
      }
    }
    else //jesli nie kwalifikuje sie do highscore
    {
    room_goto( rm_game_over );
    }
    }
    
    
    ///monety zebranie 100sztuk doda 1 zycie bohaterowi,oraz zerowanie monet
    if (global.coins=100)
    {
    global.coins=0;
    global.life+=1;
    }
    //
    if (global.coins>100)
    {
    global.coins=0;
    global.life+=1;
    audio_play_sound(dzwiek_anatol_zbiera_przedmiot, 1, false);   //odtwarzamy dzwiek po zdobyciu zycia
    }
    

     

  19. Tak jest umieszczony zawsze na scenerii...nie mam żadnych alarmów w tym obiekcie..

     

    image.png.eb579b21751da3b3c2a5c3583ab4b6cf.png

     

    Kurcze nadal nie działa..co prawda nie ma teraz żadnych błędów,ale dalej jest,że od razu przechodzi Mi do planszy highscore lub game over..kurcze co jest nie tak:/

     

     

    Obj_game_controller

     

    CREATE

     

    czas = 3*room_speed; //mnożenie wartości przez room_speed
    
    ///Ustawienia globalne
    
    image_speed = 0;
    global.editPlayerSlot = -1;
    zebraniu ich odpowiedniej ilosci
    
    
    // zmienne ponizej sa dodane do creation code pokojow
    global.pScore = 0;
    global.coins = 0;
    global.Saved = true;
    globalvar spawnX, spawnY;
    
    
    global.Zabitych[0]=0; //Pierwszy typ npc
    global.Zabitych[1]=0; //Drugi typ npc
    global.Zabitych[2]=0; //Trzeci typ npc
    global.Zabitych[3]=0; //Czwarty typ npc
    
    
    ///Widok
    globalvar gvX, gvY, gvW, gvH, gvObj, gvOffX, gvOffY;
    gvX = view_xview[0];
    gvY = view_yview[0];
    gvW = view_wview[0];
    gvH = view_hview[0];
    gvObj = view_object[0];
    gvOffX = 0;
    gvOffY = 0;
    
    ///HUD
    hpHUD = 0;
    maxHpHUD = 0;
    
    /// Wyszukaj poziom trudności i ustaw odpowiednio życie i szanse 
    
    //easy difficult
    if global.difficulty  = "easy"
    {
       global.hp = 100;
       
       global.life = 7;
    }
    
    //medium difficult
    if global.difficulty  = "medium"
    {
       global.hp = 100;
      
       global.life = 5;
    }
    
    //hard difficult
    if global.difficulty  = "hard"
    {
    
        global.hp = 100;
    
        global.life = 3;
        
    
    }
    

    Obj_game_controller

     

    STEP

     

    ///kontroler odpowiedzialny za giniecie bohatera
    
    
    if (global.life==0 and czas==0)
    {
    game_end();
    
    
    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 );
      } 
      else //jesli nie kwalifikuje sie na top 10
      {
          room_goto( rm_game_over );
      }
    }
    else //jesli nie kwalifikuje sie do highscore
    {
    room_goto( rm_game_over );
    }
    }
    
    czas = max(0, czas-1); //odliczaj do zera

    obj_player

     

    CREATE

     

    /// Glowne deklaracje zmiennych Bohatera
                         
                         //////////////////////////////
                        ///////ZMIENNE STALE//////////
                        /////////////////////////////
    ///Ustawienia
    event_inherited();
    zbieranie=true;
    eksplozja = false;
    zasiegEksplozji = 22;
    silaEksplozji = 10;
    //czas = 3*room_speed; //mnożenie wartości przez room_speed daje Ci sekundy
    
    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 Anatola 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;
    
    
    
    
        
        
        
        
        
    
    
      
    
    
    
    

    obj_player

     

    STEP

     

    ///Zycia i dopalacze dodatkowo zabieranie zyc za upadek z bardzo duzej wysokosci
    
    
    //Bohater dostajac obrazenia to miga
    //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1
    //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia
    global.zegarObrazen-=1
    if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time)
    else image_alpha=1;
    
    
    
    
    
    if (global.hp <= 0)
    {
    global.life--
     instance_destroy();
     instance_create(x,y,obj_player_ginie)
     with (instance_create(x,y,obj_entity_die)) {
      sprite_index = spr_player_die01;
      image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi
      image_xscale = other.image_xscale;
      respawnObject = obj_player;
      respawnX = spawnX;
      respawnY = spawnY;
      physics = true;
      respawn = true; 
      image_alpha=0
      
    
     }
     audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie
    }
    
    
    //Dopalacze
    if pwrupSpd > 0 {
     //Efekty
     if pwrupSpd mod 2 == 0 {
      if image_xscale > 0 {
       part_type_orientation(pArrow,0,0,0,0,0);
       part_type_direction(pArrow,0,0,0,0);
      } else {
       part_type_orientation(pArrow,180,180,0,0,0);
       part_type_direction(pArrow,180,180,0,0);
      }
      part_type_colour1(pArrow,c_lime);
      part_particles_create(partSystem,x-image_xscale*16,y-irandom(70),pArrow,1);
     }
     //Odliczanie do konca mocy specjalnej
     pwrupSpd -= 1;
    }
    if pwrupStr > 0 {
     //Efekty
     image_blend = merge_colour(image_blend,c_red,0.11);
     //Odliczanie
     pwrupStr -= 1;
    }
    if pwrupJmp > 0 {
     //Efekty
     if pwrupJmp mod 2 == 0 {
      part_type_orientation(pArrow,90,90,0,0,0);
      part_type_direction(pArrow,90,90,0,0);
      part_type_colour1(pArrow,c_yellow);
      part_particles_create(partSystem,x-16+irandom(32),y,pArrow,1);
     }
     //Odliczanie
     pwrupJmp -= 1;
    }
    
    
    

    obj_player_ginie

     

    CREATE

     

    vspeed = -10
    gravity = 0.5 

     

  20. Simianie ten twój sposób na wydłużenie tzw pauzy za nim pojawi się pokój highscore lub game over nie działa..

     

    Próbowałem też zrobić tak jak niżej,ale to samo się dzieje co u Ciebie..

    jest objaw,że życia się kończą i gra się nie kończy;-)tylko pokazuje przy ilości żyć x-1 itd..

     

    obj_game_controller

     

    Create

     

    czas=0;

     

     

    step

     

    ///kontroler odpowiedzialny za giniecie bohatera
    
    
    if (global.life==0 and czas>=2*10)
    {
    game_end();
    
    
    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 );
      } 
      else //jesli nie kwalifikuje sie na top 10
      {
          room_goto( rm_game_over );
      }
    }
    else //jesli nie kwalifikuje sie do highscore
    {
    room_goto( rm_game_over );
    }
    }

     

×
×
  • Dodaj nową pozycję...