Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 04.04.2019 uwzględniając wszystkie działy

  1. Konrad-GM

    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.
    1 punkt
  2. Konrad-GM

    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);
    1 punkt
Ten Ranking jest ustawiony na Warszawa/GMT+01:00
×
×
  • Dodaj nową pozycję...