Skocz do zawartości

Konrad-GM

Użytkownicy
  • Zawartość

    2605
  • 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

21177 wyświetleń profilu
  1. Bron i strzelanie

    Tak, w drag and drop masz bloki od IF. Powinno to mniej-więcej tak wyglądać:
  2. 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 }
  3. 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.
  4. 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.
  5. 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); }
  6. 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.
  7. 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?
  8. 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);
  9. 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.
  10. 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.
  11. 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 }
  12. 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 }
  13. 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);
  14. 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) (...)
  15.  1bit_arena

    Kilka razy przyblokowałem się na krawędzi ściany, kilka razy musiałem zresetować przez to grę. Ten bug był dla mnie szczególnie uciążliwy. Poza tym to grało się całkiem przyjemnie, ale przez bugi przeszedłem do max 2 poziomu.
×