Карта с коллайдерами по форме региона в GameMaker Studio.

Как-то для DonDuality надо было добавить какую-то глобальную цель. Мы решили создать карту с районами города, которые надо было захватывать, набирая там очки влияния.

В процессе реализации стало понятно, что в GameMaker нет возможности создать коллайдер в виде меша свободной формы, и нам надо как-то выкручиваться. В первой реализации было сделано просто: по клику выбирался ближайший район города, исходя из точки в центре спрайта этого района. Но ощущалось это, конечно, очень криво.

Позже, я разбирался с surface и обнаружил, что там есть функция, которая может получить цвет пикселя по координатам на surface. И я решил, что это то, что нам надо.

Я просто добавил surface вне зоны видимости, в котором рисуются все те же районы, что и на обычной карте, но только им задается цвет по порядковому номеру района. Цвет просто в RGB, где первые два канала 0, а в blue прописывается номер района.

surface_set_target( clickSurf );
for (var i=0; i<global.mapAreasCount; i++) {
    var _color = make_color_rgb(0, 0, i + 1);
    if array_length(clickColors) <= i {
        array_push(clickColors, _color);
    }
    var _areaData = global.mapAreasArray[i];
    var _areaAssetID = asset_get_index("dd_ui_map_area" + string(i+1));
    draw_sprite_ext(_areaAssetID, 0, 0, 0, 1, 1, 0, _color, 1);
}
// draw here….
surface_reset_target( );
draw_surface(clickSurf, x + room_width + 10, y);

А при клике, просто идет поиск нужного пикселя в данном surface и получаем из него цвет.

if ( surface_exists(clickSurf) ) {
    var _col = surface_getpixel(clickSurf, _click_x, _click_y);
    mouseOverAreaID = colour_get_blue(_col);
}

Leave a Reply