Skocz do zawartości

Konrad-GM

Użytkownicy
  • Zawartość

    2606
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    12

Ostatnia wygrana Konrad-GM w Rankingu w dniu 20 Kwiecień

Konrad-GM posiada najczęściej lubianą zawartość!

Reputacja

28 Mała Cegła Społeczności

O Konrad-GM

  • Tytuł
    Legendary Hobo
  • Urodziny 07/31/1992

Contact Methods

  • Website URL
    https://lethiandev.github.io/

Previous Fields

  • Steam
    samael_x92
  • Użytkownik GameMaker Studio 2
    Nie
  • Użytkownik GameMaker Studio
    Tak
  • Użytkownik GameMaker 8
    Nie
  • Użytkownik GameMaker 7 i wcześniejszych wersji
    Nie
  • Użytkownik Unity
    Nie
  • Uytkownik Godot
    Tak

Profile Fields

  • Płeć
    Mężczyzna

Ostatnie wizyty

21178 wyświetleń profilu
  1. Jak stworzyć tabele wyników?

    Cześć, nie widzę, żeby w GMie były takie opcje z drag & drop, ale to dość łatwo osiągnąć kodem, wystarczy, że dodasz klocki z takim kodem: Kod na końcu gry (np. ekran game over) aby dodać gracza do tabeli w obiekcie obj_koniec np. w Create Event: /// Dodaj gracza do tabeli wynikow var imie = get_string("Wprowadz swoje imie", ""); highscore_add(imie, score); Kod w obiekcie obj_tabela do wyświetlania tabeli wyników w Draw Event: /// Rysuj tabele wynikow draw_highscore(100, 100, room_width - 100, room_height - 100);
  2. Bron i strzelanie

    Tak, w drag and drop masz bloki od IF. Powinno to mniej-więcej tak wyglądać:
  3. Bron i strzelanie

    Cześć, chyba najprościej będzie zrobić zmienną np. w Create Event obiektu obj_gracz: has_gun = false; Po zebraniu broni ustawiasz zmienną has_gun na Prawda: has_gun = true; A jak masz już strzelanie, to dajesz ten kod do bloku IF, np.: if (has_gun) { // kod na strzelanie }
  4. 12 Prac Herkulesa

    Nie przejmuj się, że gra będzie "brzydko" wyglądać, lepiej popróbować z różnymi rozwiązaniami a przy tym pouczyć się środowiska.
  5. Używa IE w rzeczy samej, ale chyba żadna wersja IE nie miała trybu porno, przynajmniej ja nie widzę takiej opcji w IE11 na Win10. A czy to koniecznie musi być M$-owy WebBrowser? Ja bym próbował szczęścia z innymi browserami jak np.http://cefsharp.github.io/ CEF więcej opcji ma i powinien ogólnie lepiej działać imo.
  6. adresowanie zmiennych

    Cześć, możesz użyć funkcji instance_place w obiekcie nadrzędnym np. o_dashboard (o mniejszym Depth, żeby zawsze rysowało tekst na pierwszym planie). Funkcja ta zwraca ID instancji pod danymi współrzędnymi X,Y - mogą to być też współrzędne kursora. Można cały kod zamieścić w Draw Event obiektu o_dashboard: var inst = instance_place(mouse_x, mouse_y, o_gwiazda); if (inst != noone) { draw_set_halign(fa_center); draw_set_valign(fa_bottom); var text = 'Star at ' + string(inst.x) + ', ' + string(inst.y); draw_text_colour(inst.x, inst.y - 16, text, c_white, c_white, c_white, c_white, 1.0); draw_set_valign(fa_top); draw_set_halign(fa_left); } Jeżeli obiekty o_gwiazda nie mogą mieć z jakiegoś powodu większej maski (żeby nie musieć precyzyjnie myszką nakierowywać), to możesz użyć funkcji instance_nearest w ten sposób: var inst = instance_nearest(mouse_x, mouse_y, o_gwiazda); if (inst != noone && point_distance(mouse_x, mouse_y, inst.x, inst.y) < 10.0) { draw_set_halign(fa_center); draw_set_valign(fa_bottom); var text = 'Star at ' + string(inst.x) + ', ' + string(inst.y); draw_text_colour(inst.x, inst.y - 16, text, c_white, c_white, c_white, c_white, 1.0); draw_set_valign(fa_top); draw_set_halign(fa_left); }
  7. Grupowanie obiektów

    To super, że rozwiązałeś problem. Tak dodam jeszcze, że można sprawdzić, czy inst[ i ] nie jest ścianą (np. czy należy do grupy/teamu "walls"), jeżeli tak, to można przerwać pętlę break-em.
  8. Jaką wersję GameMakera używasz? Bodajże wersja 1.4 miała jakieś problemy z losowaniem liczb. Może ktoś bardziej obeznany wie coś więcej na ten temat. PS. Funkcję randomize(); musisz wywołać tylko raz, może w create jakiegoś obiektu?
  9. Grupowanie obiektów

    Moje skrypty są tylko przykładem kompozycji, pomysłem jak można rozwiązać problem z wielokrotnym dziedziczeniem. Nie bardzo rozumiem, dlaczego nie możesz wykonywać skryptu: if collision_line_list(x, y-hot_spot, x+sight_range, y-hot_spot, "grupa", false, true, spotted_list, true){ //seeing closest object var closest = spotted_list[|0]; spotted_point = closest.x-x; ds_list_clear(spotted_list); if (instance_exists(obj_player)) && (closest == obj_player.id) && !(status = state.attack){ // change state to attack status = state.attack; angry = 30; attack_buffer = 60; } else { // not seeing spotted_point = 0; } } W każdym obiekcie z osobna. Dodatkowo żeby sprawdzić "grupę" obiektów, to możesz zrobić coś takiego: var spotted_list = ds_list_create(); var instances = collision_line_list(x, y - hot_spot, x + sight_range, y - hot_spot, par_entities, false, true, spotted_list, true); var enemy_spotted = false; for (var i = 0; i < instances; i++) { var inst = spotted_list[| i]; // sprawdzamy przynaleznosc do teamu if (inst.team == "red" && status != state.attack) { enemy_spotted = true; spotted_point = inst.x - x; status = state.attack; angry = 30; attack_buffer = 60; break; } } if (!enemy_spotted) { spotted_point = 0; } ds_list_destroy(spotted_list); Jeżeli boisz się o optymalizację, możesz ten fragment kodu zamiast wykonywać w Step Event, np. ustawić Infinite Alarm (alarm ustawiający sam siebie) i np. uruchamiać ten skrypt co jakiś czas np. 100ms. (16ms to jedna klatka przy 60fps) Jeżeli chcesz dodać kilka team-ów, możesz zamiast zmiennej team dodawać zmienną teams jako tablicę, np. teams[0] = "red"; teams[1] = "green"; Stworzyć skrypt do sprawdzania zawartości tablicy: /// scr_array_includes(arr, value) var arr = argument0; var len = array_length_1d(arr); for (var i = 0; i < len ; i++) { if (arr[i] == argument1) { return true; } } return false; I wtedy powyższy skrypt z collision_line_list można przerobić na: var spotted_list = ds_list_create(); var instances = collision_line_list(x, y - hot_spot, x + sight_range, y - hot_spot, par_entities, false, true, spotted_list, true); var enemy_spotted = false; for (var i = 0; i < instances; i++) { var inst = spotted_list[| i]; // sprawdzamy przynaleznosc do teamu (z grupy teamow) if (scr_array_includes(inst.teams, "red") && status != state.attack) { enemy_spotted = true; spotted_point = inst.x - x; status = state.attack; angry = 30; attack_buffer = 60; break; } } if (!enemy_spotted) { spotted_point = 0; } ds_list_destroy(spotted_list);
  10. Cześć, może masz jakiś inny skrypt co powoduje znikanie obiektów - instance_destroy albo sprite ma animację która się nie loopuje i przeskakuje na pustą klatkę animacji. W debuggerze sprawdź, czy Ci znikają instancje z room-a.
  11. Grupowanie obiektów

    W zasadzie nie opisałeś problemu, a problem ze swoim rozwiązaniem, które z założenia może być niepoprawne. W GMie, tak jak w wielu innych językach programowania, paradygmat pojedynczego dziedziczenia jest dość powszechnie stosowany. Nie powinieneś myśleć w kategoriach wielodziedziczenia tak jak chociażby pozwala na to C++ tworząc logikę gry. Nawet w C++ wielodziedziczenie jest dość powszechnie uznawane jako złe podejście do rozwiązania większości problemów, częściej stosuje się po prostu kompozycje obiektów - proste i efektywne. Z tego co widzę, tworzysz jakiś obiekt "system" odpowiedzialny za obsługę innych instancji w jakiejś dziwacznej pętli - a w zasadzie nie widzę tutaj sensownego wyjaśnienia, dlaczego. A nie możesz przenieść po prostu logiki do tych obiektów? Możesz chociażby napisać skrypty scr_unit_* i komponować z nich obiekty, np.: /// scr_unit_create(team) team = argument0; some_crazy_variable = 10; /// scr_unit_step() some_crazy_variable++; /// scr_unit_draw() draw_self(); Potem w obiektach np. obj_enemy, obj_player wykonujesz odpowiednio skrypty scr_unit_create w Event Create, scr_unit_step w Event Step i scr_unit_draw w Event Draw.
  12. Błąd z "or"

    Faktycznie, nie przemyślałem tego, że w GML shadowing wbudowanych zmiennych może nie działać w taki sposób. A po uproszczeniu to w sumie można wyrzucić funkcję power: var t = floor(obj_gracz_widoczny.image_index) - 2; if (t*t - 4 == 0) { // kod }
  13. Błąd z "or"

    Można też w ten sposób: var t = floor(obj_gracz_widoczny.image_index); if (power(t - 2, 2) - 4 == 0) { // kod }
  14. Temat zbiorczy na drobnostki

    Bo bez nawiasów zwraca Ci inta, ale jest to identyfikator skryptu. Czasami użyteczne jak masz skrypt i jego ID przypisujesz do zmiennej. Wtedy możesz wywoływać ten skrypt funkcją script_execute. Np. var skrypt = scr_arrow_can_hit; // nie ma tutaj nawiasów script_execute(skrypt, parametr1, parametr2);
  15. Temat zbiorczy na drobnostki

    Cześć, nie wykonujesz skryptu, tylko porównujesz jego ID. Skrypty wywołujesz jak każdą inną funkcję, czyli w pierwszym if-ie daj: if(scr_arrow_can_hit() == 1) (...) Dodatkowo dodam od siebie, że zamiast używać other w skryptach, to powinieneś przesyłać dane poprzez parametry. Poprawia czytelność kodu oraz pozwala używać tego skryptu w różnych miejscach a nie tylko w Collision Event: ///scr_arrow_can_hit(array, against_id) var arr = argument0; var inst = argument1; var i, al = array_length_1d(arr); for(i=0; i<al; i++) { if(arr[i] == inst) return 0; } return 1; Potem używasz tego skryptu w ten sposób: if(scr_arrow_can_hit(other.array_objectID, id) == 1) (...)
×