Как-то для DonDuality надо было добавить какую-то глобальную цель. Мы решили создать карту с районами города, которые надо было захватывать, набирая там очки влияния.
В процессе реализации стало понятно, что в GameMaker нет возможности создать коллайдер в виде меша свободной формы, и нам надо как-то выкручиваться. В первой реализации было сделано просто: по клику выбирался ближайший район города, исходя из точки в центре спрайта этого района. Но ощущалось это, конечно, очень криво.
Позже, я разбирался с surface и обнаружил, что там есть функция, которая может получить цвет пикселя по координатам на surface. И я решил, что это то, что нам надо.
surface_getpixel(_clickSurf, _x, _y);
та самая функция
Я просто добавил 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
You must be logged in to post a comment.