Skocz do zawartości

pankracy

Użytkownicy
  • Postów

    320
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Odpowiedzi opublikowane przez pankracy

  1. W drugim przypadku zrobiłem tak dałem warunek przed przejściem do pokoju highscore,ale raz to działa lub wywala mnie całkiem z gry(zbiorę 5000pkt i następuje zapis wyniku lub nie zbiorę tych punktów i pojawia się plansza game over)

    Miało to być tak,że wyniki do top 10 mają zaczynać się od 5000 punktów

     

    obj_game_controller

     

    step

     

    ///kontroler odpowiedzialny za giniecie bohatera
    if (global.life=0)
    {
    game_end();
    
    
    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(global.pScore >= 5000) 
        room_goto( rm_save_score );
    } else {
        room_goto( rm_game_over );
    }
    }

     

    Jeśli chodzi o pierwszy przypadek odnośnie tzw pauzy na 2-3 sekundy za nim przejdzie do pokoju highscore i pokoju game over to alarm[0] = 3*room_speed.  mam dać w Create? czy w stepie?

  2. Cześć wszystkim,

     

    Mam taki nietypowy problem.

    Otóż..w momencie,kiedy mój bohater ginie i kończy się gra następuje zapis do tabeli wyników(gra sprawdza czy wynik nadaje się do top 10),ale dziwnie to wygląda,bo gra się kończy bohater ginie i od razu następuje zapis do tabeli wyników.

    Jest to za szybko..chciałbym to wydłużyć chociaż o 2-3 sekundy.

     

    Czyli bohater ginie kończy się gra...mijają 2 sekundy i pojawia się tabela wyników..

     

    podejrzewam,że tu trzeba chyba użyć room_speed ale już mi się pierdzieli.

    I jeszcze jedna sprawa jak zrobić żeby był spełniony taki warunek,że musi być zebrane 5000 score żeby nastąpił zapis i od tego liczone top 10 wyników,bo teraz co chwile mi zapisuje wyniki top 10 bez względu ile mam zebranych punktów...niech jest jakaś minimalna granica

     

    obj_game_controller

     

    step

     

    ///kontroler odpowiedzialny za giniecie bohatera
    if (global.life=0) 
    {
    game_end();
    
    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 {
        room_goto( rm_game_over );
    }
    }

    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)/ 3//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
    }

    Z góry dziękuje za pomoc;-)

     

  3. No dobra to bezpiecznie jak będę przy scenerii obecnie co mam 4096x1536 podzieloną na małe kawałki oraz texture page ustawione na 4096x4096

    Tła też są podzielone,bo początkowo miały rozmiar tyle co sceneria 4096x1536,a obecnie trzy tła mają rozmiary każdy po 2048x768.

    Ja obecnie korzystam z GMS 1.4 jest tam interpolacja,ale kurcze nie wiem jakie wybrać najlepsze ustawienia.

    obecnie mam tak ustawione:

     

    Czy zawsze każde tło musi mieć rozmiar kwadratu?? 2048x2048? 1024x1024 4096x4096?

     

    image.png.a41786a61e9e098e3129e76e34f22631.png

     

  4. Gra jest robiona na systemy Windows a później na Switcha.Nie robię na Android i IOS wiec nie powinno być problemu;-)

    Dzięki za informacje.

     

    To jeszcze jedno pytanie..trzymając się rozmiarów texture page 4096x4096 jeśli stworzyłbym pokoje o rozmiarach 7680x4320 oczywiście pocięte na małe fragmenty i tła pocięte na rozmiar 3840x2160(połowa scenerii 7680x4320) to tekstury zostaną przydzielone do 8194x8194 czy do 4096x4096? to jest istotne pytanie,bo w końcu zostaną podzielone żeby nie zajmowały tak wielkich rozmiarów.

  5. Mam kilka pytań...

     

    Trochę słabo,że GMS 1.4 ma ograniczenia jeśli chodzi o Backgrounds

     

    Pytanie 1

    Mam teraz 3 duże tła o wymiarach scenerii 4096x1536 na każdą plansze.

    Nawet jak je podzielę na pół to zajmą 6 backgroundów każdy po 2048x768 to też sporo,ale chyba do przełknięcia.

    texture page mam ustawioną na 4096x4096

     

    pytanie 2

     

    Sprite wrogów i bohatera mogę spokojnie ustawić na maks 128x128? bo obecnie jest ustawiony na 50x50,ale jest zbyt mały.

     

    Pytanie 3

     

    Możecie mi to do końca wyjaśnić odnośnie wielkości texture page.

    Jak mam teraz ustawioną na 4096x4096 to rozumiem,że na daną plansze nie mogę przekroczyć jej rozmiarów tak? czy bardziej tyczy się to łącznie wszystkich obiektów na danej planszy tzn że mam tła załóżmy już podzielone na te 2040x768 i na planszy jest ich trzy w takim rozmiarze do tego wszelakie sprity wrogów o rozmiarach do 128x128 i bohater w też w tych rozmiarach i podobnie pułapki przeszkody.i to może przekroczyć texture page? suma wszystkich tych obiektów na danej planszy?

     

  6. Mam takie pytanie do was...

     

    Kolega mój ma wersję gms 2.0 i obecnie sprzecza się ze mną,że nie da się uruchomić bezbłędnie projektu z gms 1.4 w gms 2.0 bo kolega ma problem z background i twierdzi,że tego nie da się naprawić.

    Jest jakaś rada na to?

    wszystko mu działa po za tłami.

     

  7. Mam takie pytanie do was...

    Rozmyślam,żeby w swojej grze ustawić kamerę podążającą za graczem na full HD(1920x1080)

    Sama sceneria mogłaby być bardzo duża np 3840x2160 lub 7680x4320(dla zachowania proporcji obrazu) odpowiednio pocięta.

    Czy taka sceneria przejdzie? czy nie będzie zbyt dużym obciążeniem dla gry?

    I teraz tak tła jako background nie da się pociąć na małe kawałki..przynajmniej Ja tego nie wiem jak zrobić co innego scenerię.Chyba,że ktoś z was zna jakąś metodę na to;-)

    ewentualnie tak jak to obecnie robię stosuje tła w rozmiarach podglądu kamery view czyli obecnie mają one 1024x768,ale fajnie by było jakby mogłyby być większe.

    I jeśli już załóżmy byłoby wszystko w porządku to sprite bohatera i wrogów mogłyby mieć wysokość 100px lub więcej?

    Obecnie mają 50px i 60px wysokości

    Na chwilę obecną mam scenerię 4096x1536 pociętą na małe fragmenty a view kamera ustawioną mam na 1024x768

  8. Nawiązując do tłumaczenia..Właśnie wyłączenie add_text przenosi mnie od razu do gry,a intro jest pomijane tam gdzie jest użyty ten add_text.

    Już kombinuje z tym na wiele sposobów..O ile menu gry bardzo ładnie tłumaczy,to już sam tekst w grze nie chce przetłumaczyć.

    trochę to dziwne,bo skrypt tłumaczeń działa od samego początku...jest umieszczony przy wyborze języka gry.

     

    Obecnie wygląda to tak:

     

    Mam room_intro a w nim obj_text_intro

     

    w Create

     

    add_text('Intro is the best');//próbowałem tu wstawić zamiast add_text tylko gmt w takiej formie intro=gmt("intro");

    w Stepie mam tak

     

    if no_text() then room_goto( inicjacja2);

     

    teraz dwa pliki tłumaczeń angielski i polski

     

    english.lang

     

    change=Click here to change language
    Back=Back
    languageto=
    
    Load game=Load game
    Sound=Sound
    Exit=Exit
    menu=Main Menu
    gameover=Game Over! 
    Credits=Credits
    quit=Quit
    clickquit=Do you want to quit?
    start=Start
    clickstart=You clicked start. The game should begin now
    current=Current language
    Controlls=Controlls
    translate=Translate!
    Options=Options
    options_difficulty=options_difficulty
    easy=easy
    medium=medium
    hard=hard
    Highscore=Highscore
    languagetext=
     
    New game=New Game
    Controll - Move left=Move left
    Controll - Move right=Move right
    Controll - Jump=Jump
    Controll - Action=Action
    Controll - Ladder up=Ladder up
    Controll - Ladder down=Ladder down
    
    intro=intro is the best

     

    polish.lang

     

    change=Kliknij tutaj, aby zmienić ustawienia
    Back=wstecz
    languageto=
    Load game=Wczytaj grę
    Sound=Dzwięk
    Exit=Wyjście
    menu=menu główne
    gameover=Koniec gry!
    Credits=Autorzy
    quit=Wyjście
    clickquit=Czy na pewno chcesz wyjść?
    start=start
    clickstart=Po kliknięciu przycisku start. gra powinna rozpocząć się teraz
    current=bieżący język
    Controlls=Sterowanie
    translate=Tłumaczenie-proces
    Options=Opcje
    options_difficulty=opcje poziomów trudności
    easy=Łatwy
    medium=Normalny
    hard=Trudny
    Highscore=Tabela wyników
    languagetext=
    New game=Nowa Gra
    Controll - Move left=Chodzenie lewo
    Controll - Move right=Chodzenie prawo
    Controll - Jump=Skok
    Controll - Action=Akcja
    Controll - Ladder up=Wchodzenie po drabinie
    Controll - Ladder down=Zchodzenie z drabiny
    intro=Intro jest najlepsze

    Menu działa idealnie..i tłumaczy mi zarówno na polski jak i na angielski całość.

    pewnie gdzieś literówkę robię,bo powinno to działać.

     

    obj_gmt_controller - silnik tłumaczeń od razu startuje

     

    CREATE

     

    
    draw_set_font(gmt_font); 
    
    
    //startowanie silnika skryptu
    gmt_init();
    
    //Ttumaczenie i pobieranie zwrotne
    //gmt_callback_translate(create_menu);
    //gmt_callback_download(create_menu);
    
    //tworzenie jezykow
    english = gmt_lang_create("en");
    polish = gmt_lang_create("pl");
    italian = gmt_lang_create("it");
    spanish = gmt_lang_create("es");
    french = gmt_lang_create("fr");
    deutch = gmt_lang_create("de");
     
    
    //dodawanie zdania do pliku
    gmt_lang_load_sentences(english, "english.lang");
    gmt_lang_load_sentences(polish, "polish.lang");
    gmt_lang_load_sentences(spanish, "spanish.lang");
    gmt_lang_load_sentences(french, "french.lang");
    gmt_lang_load_sentences(deutch, "deutch.lang");
    
    
    //proba zaladowania lokalnego jezyka wloskiego i jesli plik nie istnieje, to tlumaczy z angielskiego
    if(! gmt_lang_load_sentences(italian, "italian.lang")){
        
        //Pamietajmy zemy skopiowac projekt wczesniej
        //bo jesli nie ma polaczenia internetowego jezyk wloski pokaze jezyk angielski
        gmt_lang_copy(english, italian, true);
        
        //zapisywanie jezyka zdan z pliku zapisanego na dysku internetowym google
        gmt_lang_load_sentences_url(italian, "https://drive.google.com/uc?id=0B6109jBBaUmeamhrN2dJUWhXMVk&export=download" );
    }
    
    
    //tworzenie innych jezykow do tlumaczenia z "Translated.net" 
    gmt_lang_translate(english, polish, false); 
    gmt_lang_translate(english, spanish, false); 
    gmt_lang_translate(english, french, false);
    gmt_lang_translate(english, deutch, false);
    
    gmt_set_language(english);
    
    
    //Gotowy do przetlumaczenia i sciagniecia
    if(!gmt_is_working()){
        //create_menu();
    }

     nie chce mi też przetłumaczyć menu wyboru poziomu

    a analogicznie jest tak samo jak w menu opcje przykład

     

    obj_menu

     

    create

     

    //to dziala i to menu jest tlumaczone z angielskiego na polski
    
    options=ds_list_create()
    options[|0]=gmt("New game")
    options[|1]=gmt("Load game")
    options[|2]=gmt("Highscore")
    options[|3]=gmt("Options")
    options[|4]=gmt("Credits")
    options[|5]=gmt("Exit")
    
    selected=0
    
    gp_up=false
    gup_down=false
    gp_left=false
    gp_right=false
    
    //Używane do animacji menu
    animation_speed=room_speed/4
    for(var i=0; i<ds_list_size(options); i++) {
        animation[i]=0
    }

     

    obj_poziomytrudnosci

     

    create

     

    //tu tlumaczenie juz nie dziala jest informacja po angielsku napis nierozpoznawalny
    
    options_difficulty=ds_list_create()
    
    options_difficulty[|0]=gmt("easy")
    
    options_difficulty[|1]=gmt("medium")
    
    options_difficulty[|2]=gmt("hard")
    
    selected=0
    
    gp_up=false
    gup_down=false
    gp_left=false
    gp_right=false
    
    //Używane do animacji menu
    animation_speed=room_speed/4
    for(var i=0; i<ds_list_size(options_difficulty); i++) {
        animation[i]=0
    }

     

  9. Master patrzy;-) Gnysku Piotrze

     

    Właśnie to jest to,że Ty jesteś Mentorem Gnysku;-) zminimalizowałeś kod ;-)

    dzięki ;-) będę musiał się tego nauczyć;-) bo mój kod jest za bardzo rozległy.

    dodałem też w końcu zmienna odpowiedzialną za ruch wroga.

    Wszystko gra jak trzeba;-)

     

    Dziękuje panowie..naprawdę dużo Mi pomogliście...nawet takiemu człowiekowi jak Mi;-)

     

     

     

  10. wywaliłem ze stepa wrogów tamten kod i dodałem zmieniony do kolizji bohatera z wrogami i teraz tak to wygląda

     

    obj_player kolizja z par_obrazenia

     

    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
    }

    Obrażenia zadaje wróg w grze tyle ile jest ustawiona na danym poziomie,

    nie wiem jeszcze czemu nie mogę na innym poziomie np hard ustawić global,hp=80 kurcze..tego nie wiem...

    I akcja ze zmienną odpowiadającą za szybkość wroga na danym poziomie też się zawiesiłem:/

     

    te enum muszę to przećwiczyć wygląda o wiele lepiej niż ja się męczę,ale Gnysku ty jesteś Gmclanowym Mentorem;-)

    Gdzie ja do Ciebie uuuuuuuuu bardzo daleko;-)

    A może wiecie co się dzieje z Damianem von Threef kurcze pisałem smsa do niego,ale cisza.

  11. Już minimalizuje kod;-)

     

    jeśli w stepie wroga mam tak:

     

    Obj_enemy

    STEP

    //obrazenia jakie zadaje nam wrog na danym poziomie
    if(place_meeting(x, y, obj_player) and alarm[8] == -1)
    {
    if(global.difficulty == "easy") && place_meeting(x,y,obj_player) then global.hp -= 10;//6 uderzen wroga 
    if(global.difficulty == "medium") && place_meeting(x,y,obj_player) then global.hp -= 50;//4 uderzen wroga 
    if(global.difficulty == "hard") && place_meeting(x,y,obj_player) then global.hp -= 50;//3 uderzen wroga 
    
    alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
    }

    I w obj_enemy mam ustawioną kolizję z bohaterem i jest taki kod

     

    obj_enemy - dodana kolizja z par_obrazenia

     

    /// Obrazenia jakie wrog zadaje Bohaterowi
    
    
    if global.zegarObrazen<0 
    {
    global.hp-=17
    global.zegarObrazen=room_speed*2
    }

    No to myślę,że w tym tkwi problem..

    Bo w stepie jest też zmienna globa.hp i teraz co ma się wykonywać?

    Bo nie mogę zmiennej global.hp wyłączyć,zawsze jest i była;-)

    natomiast jak w stepie wroga wyłączę wyżej kod to jest wszystko tak jak było na początku gry bez błędów..Wróg zadaje obrażenia bohaterowi odejmując mu hp-=17

    teraz jak to ogarnąć żeby na danym poziomie  zabierał odpowiednią ilość hp zależne od tego jak ustawiliśmy.

    Ten STEP wroga coś tu jest nie tak...

     

  12. Gnysku Piotrze  czyli  to mogę dodać do kolizji bohatera z wrogiem? czy lepiej w stepie wroga?

     

    global.hp -= 10 * global.difficulty; //10,20,30

    Zastanawia mnie co jest powodem tej sytuacji,że po zabraniu życia poprzez obrażenia od wroga bohater wariuje cały czas spada i pokazuje sie dla przykładu taka informacja

    x-1 x-3 x-5 x-7 x-9 x-11

    to akurat przykład na poziomie hard,gdzie mam ustawione 3 życia i 80% energii

     

     

    w End stepie jeśli dam na końcu ifa

    instance_destroy();

    to wtedy od razu po utracie życia jest game over...bez względu na ilość posiadanych żyć.

    Ja myślę,że problem jest w kolizji z wrogiem i tylko z wrogiem,bo jak całkowicie wyłączę w stepie ten kod i w Create bohatera włączę zmienna global.hp=100; to wszystko jest w porządku,ale tak jak mówię nie mogę wtedy ustawić energii mniejszej niż 100% na innym poziomie gry.

  13. Faktycznie sensu nie miał ten kod w stepie...

    cały czas jest po wyłączeniu zmienne global,hp w bohaterze jak wróg mnie zabije..przeniesie mnie na początek planszy i bohater obraca się do góry nogami i cały czas spada i pokazuje się taka informacja x-1 x-3 x-5 x-7 x-9 x-11 itd...

    Dziwne,bo nie ma tego zjawiska jak włączę zmienną global,hp w create..no,ale wtedy nie mogę ustawić energii mniejszej dla gracza na innym poziomie trudności.

  14. Dziwna sytuacja.

     

    Przypadek1.

    Jak wyłączę w CREATE bohatera zmienną global.hp=100; to wtedy te cyrki się dzieją..

    Jest tak,że obojętnie ile żyć mam czy 7,5 czy 3 to w chwili kiedy zginę od wroga od razu zeruje mi do 0 żyć..nie odejmuje żyć np mam 3 i potem 2 itd tylko od razu z 3 żyć do 0. Oczywiście działają obrażenia ze stepu jakie zadaje mi wróg w momencie kontaktu z nim.

    lub odejmuje wszystkie życia i przeniesie mnie na początek planszy bo tak mam to ustawione i za chwile bohater obraca się do góry nogami i cały czas ginie i spada a na pasku HUD pokazuje się x-1 x-2 x-3 i tak cały czas nie liczyłem ale do x-9 aż doszło i wyłączyłem grę;-)

     

    Przypadek2.

    Jeśli mam włączoną zmienną  global.hp=100 w CREATE bohatera (tak jak zawsze to było) to ze stepu wroga nie działają już te obrażenia tylko te co są przypisane w kolizji z wrogiem czyli par_obrazenia par_attack. Nie mogę wtedy też ustawić mniejszej ilości energii np na poziomie hard 80%.

    Wtedy też wszystko działa poprawnie.

     

     

     

    Widzę coś w END STEPIE obj_player i w STEPIE obj_game_controller

    jest hp <=0 ale to raczej chyba nie w tym problem

    Ja to myślę,że problem może być w tych obiektach kolizyjnych bohatera z wrogiem i wroga z bohaterem; par_obrazenia oraz par_attack i par_bronkulki bo tu deklarujemy zmienną global,hp i to samo robimy w stepie wroga tak myślę,że to jest ten problem.

    o proszę ligę oglądasz;-) to ty zapalony kibic jesteś zapewne:-)

     

    obj_player

    collision z par_bronkulki

     

    ///Obrazenia zadawane z bombek
    if other.owner == par_enemy { //jesli bomba uderzy we  wroga zadaje mu obrazenia
     with other {
      instance_destroy();
     }
     if global.zegarObrazen == 2 {
      global.hp -= other.sila+other.silaEksplozji;
      global.zegarObrazen = room_speed/2;
      
     }
    }

     

     

    obj_player

    collision z par_obrazenia

     

    ///Obrazenia jakie okreslone obiekty dziedziczace z tego rodzica zadaja Bohaterowi
    
    if global.zegarObrazen<0 
    {
    global.hp-=17
    global.zegarObrazen=room_speed*2
    
    }

     

    obj_player

    collision z par_attack

     

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

     

     

     

    obj_player

     

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

    Mam jeszcze osobny obiekt na planszy utworzony

     

    obj_game_controller

     

    STEP

     

    ///kontroler odpowiedzialny za giniecie bohatera
    if (global.life=0)
    {
    game_end();
    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 {
        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
    }
    
    
    
    
    
    

     

     

    Obj_enemy

     

    CREATE

     

    ///Ustawienia
    event_inherited();
    
    pointvalue=choose(10,20,30,40,50,60,70,80,90,100);//dodaje nam losowa ilosc pkt
    dead=false;
    killed=false
    alarm[8] = -1;
    movement_speed = 4;
    hp = 10;
    maxHp = 10;
    global.zegarObrazenWroga = 0;
    at=1
    st=1
    spd=4
    
    //pozycje powrotu wroga po restarcie mapy
    start_x = x; 
    start_y = y;
    
    
    widzi = 0;
    
    ///poziomy trudnosci
    
    
    //easy difficult
    if global.difficulty  = "easy"
    {
       hp = 10;
    }
    
    //medium difficult
    if global.difficulty  = "medium"
    {
       hp = 15;
    }
    
    //hard difficult
    if global.difficulty  = "hard"
    {
    
        hp = 20;
      
        
    }
    

    obj_enemy

     

    STEP

     

     ///Poruszanie sie
    ///AI wroga
    
    if place_free(x,y+1)
    {gravity = 0.5}
    else
    {gravity = 0}
    
    if at=1
    {
    at=2
    speed=4
    }
    
    if at=2
    {
    if hspeed<0
    {
    image_xscale = -1;
    if !place_meeting(x-30,y+10,par_solid )
    speed*=-1
    else if place_meeting(x-1,y,par_solid )
    speed*=-1
    st=1
    }
    
    else if hspeed>0
    {
    image_xscale = 1;
    if !place_meeting(x+30,y+10,par_solid )
    speed*=-1
    else if place_meeting(x+1,y,par_solid )
    speed*=-1
    st=2
    }
    }
    
    //ginie wrog
    if hp<0
    {
    instance_destroy()
    }
    killed=false
    
    //animacja 
    image_speed=0.3
    
    
    /*
    if hspd == 0 {
     image_xscale *= -1;
     unstick(8);
    }
    */
    
    //Gdy wrog zostaje atakowany mruga
    if global.zegarObrazenWroga > 0 {
     visible = !visible;
     global.zegarObrazenWroga -= 1;
    } else {
     visible = true;
    }
    
    if hp <= 0  {
     
     instance_destroy();
     
    }
    
    
    // poziom trudnosci 
    
    //obrazenia jakie zadaje nam wrog na danym poziomie
    if(place_meeting(x, y, obj_player) and alarm[8] == -1)
    {
    if(global.difficulty == "easy") && obj_player then global.hp -= 10;//6 uderzen wroga    
    if(global.difficulty == "medium") && obj_player then global.hp -= 40;//4 uderzenia wroga
    if(global.difficulty == "hard") && obj_player then global.hp -= 30;//3 uderzenia wroga
    
    alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
    }
    
    
    

    obj_enemy

    collision z par_attack

     

    ///Obrazenia od ataku wrecz
    
    
    if other.owner == par_player && global.zegarObrazenWroga == 2 {
     hp -= other.sila;
     killed=true
     global.zegarObrazenWroga = room_speed/2;
    }

    obj_enemy

    collision z par_bronkulki

     

    ///Obrazenia od pociskow 
    if other.owner == par_player {
     with other {
      instance_destroy();
     }
     if global.zegarObrazenWroga == 0 {
      hp -= other.sila+other.silaEksplozji;
      killed=true
      global.zegarObrazenWroga = room_speed/2;
      instance_create(x+0,y+0,obj_oberwalefekt);
      
     }
    }

     

  15. Mam też takie pytanie..nie wiem,czemu tak się dzieje...

    w chwili kiedy odkomentuje zmienną global.hp=100; (bo jest ona zadeklarowana niżej w kodzie) to jak ginę od wrogów mając np żyć obojętnie ile czy to 7 5 czy 3 od razu odejmuje wszystkie życia i przeniesie mnie na początek planszy bo tak mam to ustawione i za chwile bohater obraca się do góry nogami i cały czas ginie i spada a na pasku HUD pokazuje się x-1 x-2 x-3 i tak cały czas nie liczyłem ale do x-9 też doszło..co jest nie tak?

     

    Jak mam włączoną zmienną w Create Bohatera global.hp=100; to jest ok,ale wtedy nie mogę ustawić mniej energii na innym poziomie jakim chce np na hard chciałem 80% energii

     

    obj_player

     

    CREATE

     

    /// Glowne deklaracje zmiennych Anatola
                         
                         //////////////////////////////
                        ///////ZMIENNE STALE//////////
                        /////////////////////////////
    ///Ustawienia
    event_inherited();
    zbieranie=true;
    eksplozja = false;
    zasiegEksplozji = 22;
    silaEksplozji = 10;
    
    
    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;
    
    
    ///poziomy trudnosci
    
    
    //Ustaw domyślne wartości życia i szans, gdyby nie wyszukało jaki jest poziom trudności
    //global.hp = 100;
    //global.life = 7;
    
    
    
    /// 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 = 80;
        global.life = 3;
        
    
    }
    
        
        
        
        
        
    
    
      
    
    
    
    

     

  16. Pytanie też mam do Gnyska;-) do mentora forum zawodowca niczym Leona;-)

    wspomniałeś,że zmienne definiujesz wcześniej , na początku gry...mam rozumieć,że tworzyć dowolny obiekt wrzucasz tam kod i umieszczasz go na danym etapie gry w roomie?

     

    SimianVirus7 i Gnysek dziękuje wam bardzo za pomoc...Kurcze żeby nie wy to leżałbym z tym jak pies na szczepieniu;-)

  17. SimianVirus7 ;-) nie mam akurat tak..jest zdefiniowany speed i przypisana prędkość w tym przypadku speed=4; hspeed jest,ale zobacz jak to wyżej wygląda w stepie wroga

     

    Obj_Enemy

     

    STEP

     

     
    ///Poruszanie sie
    ///AI wroga porusza sie i jak nas widzi to zaczyna nas gonic az znikniemy z jego pola widzenia
    //i powraca na miejsce,gdzie zobaczyl nas po raz perwszy
    
    
    //if(point_distance(xstart,0,obj_player.x,0) <= 250)
    if(instance_exists(obj_player) && action!=stan.patrol && collision_line(x,y,obj_player.x,obj_player.y,obj_niewidzialny,0,1)) {
        if(follow>room_speed/2) {
            follow=0
        }
        image_speed=0
        image_index=0
        action=stan.wait
    } else if (instance_exists(obj_player) && distance_to_object(obj_player)<=250 && abs(y-obj_player.y)<64 && follow>=room_speed/2 && image_xscale-sign(obj_player.x-x)=0 && !collision_line(x,y,obj_player.x,obj_player.y-12,obj_niewidzialny,0,1)) {
        action=stan.follow
        follow=30
    } 
    
    if(action=stan.wait) {
        image_speed=0
        image_index=0
        follow++
        if(follow>room_speed/2) {
            action=stan.patrol
            follow=0
        }
    } else {
        image_speed=0.3
    }
    
    if(action=stan.patrol) {
        follow++
    }
    
    if (place_free(x,y+1))
    {gravity = 0.5}
    else
    {gravity = 0}
    
    if at=1
    {
    at=2
    speed=4
    }
    
    if at=2 {
        if (hspeed<0) {
            image_xscale = -1;
            if (!place_meeting(x-30,y+10,par_solid ) or place_meeting(x-1,y,par_solid )) {
                speed*=-1
                st=1
                if(action=stan.follow) {
                    action=stan.wait
                }
            }
        } else if (hspeed>0) {
            image_xscale = 1;
            if (!place_meeting(x+30,y+10,par_solid ) or place_meeting(x+1,y,par_solid )) {
                speed*=-1
                st=2
                if(action=stan.follow) {
                    action=stan.wait
                }
            }
        }
    }
    
    //Podazanie za graczem
    if(action=stan.follow && follow>0) {
        follow=max(0,follow-1)
        if(instance_exists(obj_player) && distance_to_object(obj_player)>3) {
            move_towards_point(obj_player.x,y,min(5,abs(obj_player.x-x)));
        }
    } else if(action=stan.patrol && distance_to_point(xstart,ystart)>2) {
        speed=4
    } else if(action=stan.wait) {
        speed=0
    }
    
    //ginie wrog
    if hp<0
    {
    instance_destroy()
    }
    
    
    //Gdy wrog zostaje atakowany mruga
    if global.zegarObrazenWroga > 0 {
     visible = !visible;
     global.zegarObrazenWroga -= 1;
    } else {
     visible = true;
    }
    
    if hp <= 0  {
     
     instance_destroy();
     
     dead = true; //wywolujemy alarm gdy wrog jest martwy
     
      
     //tworzymy losowa ilosc punktow po zabiciu wroga,oraz napis,ktory sie nad nim wyswietla z iloscia punktow losowych 
      z = instance_create(x,y-10,obj_floating_txt);
      global.pScore+=pointvalue
      z.txt = "$" + string(pointvalue);
      z.yspeed = -4;
      
      
      
      //instance_create(x,y-50,choose(obj_coin,obj_diamencik,obj_trzy_poduszki,obj_serducho,obj_motyl,obj_gwiazdka,obj_ksiezyc)) // daje losowy item np monety albo jabłuszka
      with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_bandyta_ginie)  {
      //sprite_index = sprWrogGinie;  //sprite do poruszania sie wroga
      image_xscale = other.image_xscale;
      image_yscale = other.image_yscale;
      hspd = other.hspd;
      vspd = other.vspd;
        audio_play_sound(dzwiek_wrog_ginie, 1, false); //odtwarzamy dzwiek przy smierci wroga
     }
    }
    
    // czasowy respawn wrogow troche pomeczyles sie ale dziala jak trzeba :)
    if (dead == true)
    {
     //obj_spawn.dead = true; //respawn zabitego wroga jak nie bedzie dzialac to wtedy dead=true i wpisac instance_create(x,y,obj_spawn)
     
     instance_create(x,y,obj_spawn_bandyta);
    
    }
    
    // poziom trudnosci 
    
    //obrazenia jakie zadaje nam wrog na danym poziomie
    if(place_meeting(x, y, obj_player) and alarm[8] == -1)
    {
    if(global.difficulty == "easy") && obj_player then global.hp -= 10;//6 uderzen wroga    
    if(global.difficulty == "medium") && obj_player then global.hp -= 40;//4 uderzenia wroga
    if(global.difficulty == "hard") && obj_player then global.hp -= 30;//3 uderzenia wroga
    
    alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
    }
    

     

     

  18. Ostatecznie tak musi być;-) i teraz w końcu działa;-)

    na poziomie easy bohater jest na 6 strzałów na poziomie medium na 4 strzały i na poziomie hard na 3 strzały

    Poziom energii na poziomie easy i medium 100% a na hard 80%

    obj_enemy

     

    CREATE

     

    alarm[8] = -1;

     

     

     

    STEP

     

    if(place_meeting(x, y, obj_player) and alarm[8] == -1)
    {
    if(global.difficulty == "easy") && obj_player then global.hp -= 10; //6 uderzen wroga    
    if(global.difficulty == "medium") && obj_player then global.hp -= 40;//4 uderzenia wroga
    if(global.difficulty == "hard") && obj_player then global.hp -= 30;//3 uderzenia wroga
    
    alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
    }

    Teraz walczę z tą zmienną pomocniczą spd=8;

    najprościej to zdefiniować w create prędkość z jaką ma się poruszać wróg czyli:

     

    CREATE

     

    spd=4;

    a w stepie wroga odpowiednio dla danego poziomu ustawić spd?

     

×
×
  • Dodaj nową pozycję...