Skocz do zawartości

SimianVirus7

Użytkownicy
  • Postów

    264
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    31

Treść opublikowana przez SimianVirus7

  1. 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; } } } }
  2. 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
  3. "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.
  4. 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ć.
  5. A spróbuj wywalić ten kod na kończenie gry. Daj jakiś warunek, który nigdy się nie spełni albo po prostu zakomentuj to wszystko. Jeśli nadal będzie ten błąd to masz coś zdublowane. Skoro te wszystkie przykłady, które Ci dajemy nie działają to musisz się pobawić w debugowanie. O! I jeszcze możesz spróbować dać: if (global.life > 0) { global.life -=1; show_debug_message("Sie wykonalem"); // Dodaj wpis do konsoli, w celu debugowania } 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); } } I zależnie ile masz ustawionych global.life tyle razy powinieneś dostać w konsoli tekst o treści "Sie wykonalem"
  6. No i wkleił xD Ogólnie, jeśli 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); } } Masz w stepie, to Gnysek ma rację. Twój główny if "if (global.life > 0)" wykonuje się co jedną klatkę gry - bardzo bardzo szybko - dlatego musisz go zaimplementować tak, aby był sprawdzany TYLKO RAZ na jedną śmierć w rundzie. Albo daj coś takiego, chociaż wydaje mi się, że może to wprowadzić mały galimatias: obj_game_controler Create: SprawdzTylkoRaz = true; Step: if (global.life > 0 and SprawdzTylkoRaz == true) { global.life -=1; SprawdzTylkoRaz = false; } else { SprawdzTylkoRaz = false; if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 60; // 150 to 5 sekund SprawdzTylkoRaz = false; } } else { SprawdzTylkoRaz = false; if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { SprawdzTylkoRaz = false; 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 } } SprawdzTylkoRaz = false; room_goto(rm_game_over); } } (Masz tak bardzo nieczytelny kod, że nie wiem, czy we wszystkich miejscach w if'ach dałem "SprawdzTylkoRaz = false;" PS: To jest jak na razie moja najbardziej wyczekiwana gra tego roku
  7. Spoko, ja też za dużo czasu nie mam, spędziłem łącznie może z 3 godziny. W takie buble też się fajnie gierczy, szczególnie jeśli to gry na konkurs
  8. To nie moja gierka xD tylko chodzi mi o to, że wbił się w temat konkursu zrobił Age od empires w pierwszej osobie
  9. Ja robię. Jak na razie pracę idą pomału, ale coś tam powstaje. Mam nadzieje, że nie jestem jedyny, bo jestem ciekawy tych gierek. Wczoraj wpadłem nawet na takie coś https://www.youtube.com/watch?v=tPaF7nEFW_k
  10. A w obj_game_controller dodałeś alarm[0] jako event? Bo inaczej (przynajmniej kiedyś tak było) alarm[0] jest nieaktywny. Musisz dać alarm[0] jako event, a w nim jakąś akcję np. skrypt w którym jest zamieszczona jakakolwiek linijka kodu, może być sam komentarz "//cześć jestem komentarzem i podtrzymuje alarm[0] przy życiu"
  11. Może źle użyłeś alarmu, albo nadpisałeś jakiś. Jak chcesz zrobić po swojemu, czyli zmiennymi, to zrób tak: Create: czas = 3*room_speed; //mnożenie wartości przez room_speed daje Ci sekundy 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 I rozumiem, że obj_game_controller jest cały czas aktywny, tak? no, bo jeśli nie, to odliczanie też nie jest aktywne, wtedy musisz to zrobić w innym, aktywnym obiekcie
  12. Raczej coś takiego: obj_player_ginie Create: obj_game_controller.alarm[0] = 3*room_speed; //Nastaw alarm dla obj_game_controller obj_game_controller Create: alarm[0] = -1; Alarm[0]: //Jestem komentarzem w kodzie, aby alarm zostal aktywny 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 >= 5000) //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 ); }
  13. No na te dwa problemy są bardzo proste rady. 1. Żeby od razu nie przechodził do tablicy wyników, stwórz alarm 2-3 sekundowy, który będzie robił za pause. "If (global.life == 0 and alarm[0] = -1) {//kod}". Przed tym sprawdzeniem musisz dać gdzieś alarm[0] = 3*room_speed. 2. A tutaj sam sobie odpowiedziałeś w pytaniu. Skoro ma być spełniony warunek, że od 5000 scoruf ma się dodawać wynik, no to daj ten warunek gdzieś. Warunki to if'y. If(score >= 5000)
  14. Z tego co widzę, to koleś zwyczajnie piszę shadera, a shadery są możliwe w game maker 1.4 / 2.0
  15. Cześć Wszystkim! Dzisiaj po południu dostałem zgodę, a więc organizuje konkurs! Zadaniem jest stworzyć odmienną wersję gry, którą wszyscy znają, np. Skyrim jako strategia/karcianka. Gry nie będą monetyzowane w żaden sposób, a więc nikt nie powinien przyczepić się do praw autorskich. Możecie używać dowolnego silnika oraz technologii, ważne, abyście robili to w pojedynkę, ponieważ przewidziane są nagrody! 1 Miejsce - zwycięzca może wybrać nagrodę z miejsca 1, 2, 3; Human: Fall Flat - Steam Life is Strange Complete edition - Steam Company of Heroes 2 - Steam 2 Miejsce - zwycięzca może wybrać nagrodę z miejsca 2, 3; Random Premium Key - Steam Gothic Universe Edition (1-3) - Steam Minecraft Windows 10 edition - Microsoft 3 Miejsce; Grid 2 - Steam Dirt 3 - Steam Lego LoTR - Steam Lego Batman - Steam Pojedynkują się: Wszyscy którzy maja chęć, nie trzeba się nigdzie zapisywać. Temat: Znana gra w innym wydaniu. Zasady - Gra musi być tworzona w pojedynkę - Projekt tworzony od podstaw - Wybór silnika dowolny - Dozwolona gra 2D jak i 3D Zakończenie: 1 Września 2019 (niedziela), godzina 19:00. Ocenia/ją: zostanie założona ankieta dla ogółu - demokracja. PS: Użytkownik o nicku SimianVirus7 ma bana na nagrodę ale także może brać udział w konkursie. Głosy na jego pracę nie będą wliczane w ranking.
  16. SimianVirus7

    Szukam programu

    Microsoft remote desktop będzie działać tylko wtedy, kiedy masz stałe/zewnętrzne IP. Jeśli Twój dostawca Ci tego nie oferuje, musisz otworzyć port 3389 na routerze oraz dostawcą też musi go otworzyć na serwerze, niektórym to robią darmowo a niektórzy za opłatą. A sprawdzałeś steam moonlight? Ale musisz mieć w kompie kartę od nvidia
  17. *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") && 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 } odp. Albo czegoś nie wiem, albo ten kod po prostu nie ma sensu. Przetłumacz go sobie powoli - jeśli poziom trudności na easy/medium/hard oraz obiekt gracz (ale co obiekt gracz?) to global.hp odejmij 10/40/30. Zapewne, choć nie jestem jasnowidzem, chodzi Ci o kolizjie, czyli musisz dać: if(global.difficulty == "easy") && place_meeting(x,y,obj_player) then global.hp -= 10;//6 uderzen wroga *obj_player* - end step (w ogóle nie wiem po co używasz end step, ja go nigdy nie używałem xD) if (global.hp <= 0) { global.life-- instance_destroy(); // <--------------------------------------- Teoretycznie, dalszy kod od tej linijki się nie kompiluje, iż aż ponieważ obiekt jest niszczony; 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 } odp. dałem Ci komentarz w kodzie ale z drugiej strony, mówisz, że bohater obraca się nogami i ginie, to tak, jakby jednak instance_create(x,y,obj_player_ginie) się wykonał. Niemniej przenieś instance_destroy();na sam koniec if'a PS: dajesz tyle kodu do przetworzenia, że równie dobrze, możesz zapodać projekt Musisz nauczyć się minimalizować problem.
  18. Ginie, bo pewnie hp ma cały czas na 0. Ale w sumie nie wiem jaki argument przypada za tym, że wyświetla się ekran śmierci, także zobacz czy ten argument czasem nie jest zapętlony w jakiś sposób. Coraz bardziej chce zagrać w ten Twój twór. Przez weekend mnie nie ma w domu, a na telefonie ciężko jest rozczytać kod, a poza tym jest jeszcze liga. Także na razie Ci nie pomogę.
  19. Tak, a create ustawiasz spd=4. Teraz w step wszędzie tam gdzie masz definiowaną szybkość poruszania się np. hspeed = 6 to zamieniasz cyfrę (tutaj 6) na zmienną spd czyli hspeed = spd. I tak w całym kodzie. Teraz możesz komfortowo zmieniać szybkość poruszania się wroga tylko w jednym miejscu. Mianowicie na samym początku w step robisz tak: "If(global.dificulty=="easy") then spd=3; If(global.dificulty=="medium") then spd=5; If(global.dificulty=="hard") then spd=7;
  20. Bo dałem tylko przykład. Analogicznie do tego przykładu robisz ruch wroga i siłę obrażeń. Nie definiujesz tego w osobnym obiekcie (możesz ale po co?). Piszesz to w obiekcie wroga, prawdopodobnie w stepie, lub gdziekolwiek masz napisany kod ruchu i zadawania obrażeń. Spróbuje napisać coś z pamięci: obj_enemy //Create alarm[8] = -1; //Step if(place_meeting(x, y, obj_Player) and alarm[8] == -1) { if(global.dificulty == "easy") then obj_Player.hp -= 10; if(global.dificulty == "medium") then obj_Player.hp -= 20; if(global.dificulty == "hard") then obj_Player.hp -= 30; alarm[8] = 1*room_speed; //atakuj bohatera co sekunde } //Alarm[8] /*komentarz tylko po to, aby alarm był włączony*/ Co do szybkości chodzenia wroga, to możesz tylko zdefiniować zmienną pomocniczą spd i przypisujesz wszędzie tak, gdzie masz hspeed, a później tylko zmieniasz spd co do poziomu trudności
  21. Create - wszystko co tam napiszesz jest wykonywane przy pojawieniu się instancji (każdego obiektu na mapie nawet jeśli jest taki sam). Także hp, zmienna dla speed, energia może tam być zdefiniowana. Step - kod wykonywany przy każdej klatce gry (fps). Czyli, cały kod poruszania się, zadawania obrażeń itp Jeśli masz w kodzie napisane tak że "If(keyboard_check(vk_right)) { hspeed = 3 } " To musisz zrobić tam to samo sprawdzenie co przy definiowaniu hp, czyli " If(global.difficulty == "easy") { If(keyboard_chceck(vk_right)) { hspeed = 3 } } "
  22. Dobrze, błąd widać od razu, ale teraz dam Ci pogłówkować, tak minimalnie. Zobacz sobie, co przypisujesz do zmiennej global.difficulty w obj_poziomtrudnosci, a co sprawdzasz w obj_bohater. ps: i może rzeczywiście, tak jak mistrzu Gnysek napisał, powiedz to sobie głośno. Ja tak też czasami muszę robić, kiedy nie mogę znaleźć błędu.
  23. O Matko Boska Elektryczna, coś Ty za młyn tam narobił. Wybieranie Ci nic nie da, skoro za każdym tworzeniem bohatera, ustawiasz global.difficulty = 2; W obiekcie bohatera, masz mieć skrypty tylko z kodem, który sprawdza jaki jest poziom trudności. Do tego w większości używasz if'a. Żadnych global.difficulty = cokolwiek! Przed rozpoczęciem gry (a przynajmniej tak mi się wydaje, że taki masz zamiar) gracz ma określić jaki ma być poziom trudności, a później dopiero ma się zacząć gra. Czyli: Menu gry -> wybierane trudności -> rozgrywka (pojawienie się bohatera) Ten cały kod który Ci napisałem (a raczej przerobiłem twój), masz dać do innego obiektu, choćby obiekt_poziomytrudnosci. Pamiętaj, że kod wybierania trudności gry, ma być przed pierwszym pojawieniem się bohatera w grze, bo inaczej wywali błąd. Oczywiście możesz się przed tym zabezpieczyć. ///Create bohatera - kod na sprawdzanie poziomu gry ///poziomy trudnosci /*tutaj wyrzuciłem Ci to, co przeszkadzało*/ //Ustaw domyślne wartości życia i szans, gdyby nie wyszukało jaki jest poziom trudności global.hp = 100; global.live = 7; /// Wyszukaj poziom trudności i ustaw odpowiednio życie i szanse //easy difficult if(global.difficulty == "easy") { global.hp = 100; global.live = 7; } //medium difficult if(global.difficulty == "medium") { global.hp = 80; global.live = 5; } //hard difficult if(global.difficulty == "hard") { global.hp = 50; global.live = 3; }
  24. w obj_poziomtrudnosci w nowym roomie (nie rób w tym samym pokoju, gdzie masz obj_menu, czy cokolwiek co Ci rysuje menu) ///Create (nie mam pojęcia co robi gmt, jak nie zadziała, to spróbuj usunąć ten wyraz sprzed nawiasu) options_difficulty=ds_list_create() options_difficulty[|0]=gmt("Łatwy") options_difficulty[|1]=gmt("Normalny") options_difficulty[|2]=gmt("Wysoki") 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 } ///Step if(abs(gamepad_axis_value(0,gp_axislv))<0.3 && !keyboard_check(vk_anykey)) { gp_up=0 gp_down=0 } if(abs(gamepad_axis_value(0,gp_axislh))<0.3 && !keyboard_check(vk_anykey)) { gp_left=0 gp_right=0 } if(keyboard_check_pressed(vk_down) || gamepad_button_check_pressed(0,gp_padd) || (gamepad_axis_value(0,gp_axislv)>0.7 && !gp_up)) { selected++ if(selected>=ds_list_size(options_difficulty)) { selected=ds_list_size(options_difficulty)-1 } gp_up=true } if(keyboard_check_pressed(vk_up) || gamepad_button_check_pressed(0,gp_padu) || (gamepad_axis_value(0,gp_axislv)<-0.7 && !gp_down)) { selected-- if(selected<0) { selected=0 } gp_down=true } if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected == 0) then global.difficulty = 0; //ustaw latwy if(selected == 1) then global.difficulty = 1; //ustaw sredni if(selected == 2) then global.difficulty = 2; //ustaw trudny } ///Draw draw_set_valign(1) draw_set_halign(1) draw_set_font(fontIntro) var line_height=ceil(string_height("M")*1.1) for(var i=0; i<ds_list_size(options_difficulty); i++) { if(i=selected) { //Wybrana opcja animation[i]=clamp(animation[i]+(1/animation_speed),0,1) } else { animation[i]=clamp(animation[i]-(1/animation_speed),0,1) } var color=merge_colour(c_black,c_red,animation[i]) draw_text_transformed_color(x,y+(line_height*i),options_difficulty[|i],1+animation[i]/5,1+animation[i]/5,0,color,color,color,color,1) }
×
×
  • Dodaj nową pozycję...