Если я правильно понимаю ваш вопрос, у вас есть сетка 2 x 2, в которую перетаскиваются значки. Вам необходимо сохранить положение иконки в этой сетке.
Пара способов сделать это, но я думаю, что проще всего было бы использовать немного математики, чтобы определить, где находится значок.
Если есть какая-то кнопка, которая указывает, что пользователь поместил значок в то место, где он / она хочет написать свой код в обработчик для этой кнопки.
Далее будет найдено расстояние между верхним левым углом сетки и верхним левым углом значка. Вы можете использовать это для определения количества квадрантов над значком, разделив значение x этого расстояния на ширину квадранта. В этом случае ширина квадранта составляет половину от общей ширины сетки (потому что это только 2 поперек). Чтобы узнать, сколько квадрантов находится на значке, проделайте то же самое с компонентом y расстояния.
var col:Number = Math.round( Math.abs(icon.x - grid.x) / (grid.width/2))+1;
var row:Number = Math.round( Math.abs(icon.y - grid.y) / (grid.height/2))+1;
Math.abs (функция абсолютного значения) на всякий случай, если расстояние является отрицательным по любой причине. Без +1
это выражение приведет к 0
или 1
в col
и row
, что было бы хорошо, если бы вы рассматривали первый квадрант как 0 x 0, но так как я сказал, что сетка 2 x 2, то это было бы неплохо иметь самый дальний угол сетки 2 x 2.
Также для того, чтобы это работало, сделайте сетку и иконку символами с именами экземпляров. Имена экземпляров можно задать в окне свойств в разделе «имя экземпляра» после нажатия на символ на сцене (основная рабочая область).
Кроме того, если вы реализуете это, вы заметите, что даже если значок находится более чем на половине пути вниз по квадранту, он все равно будет зарегистрирован как находящийся в квадранте выше. Это потому, что в приведенном выше коде мы сравниваем расстояние между верхними левыми углами. Чтобы измерить расстояние между центром значка и верхним левым углом сетки, просто добавьте половину height
значка к его y value
следующим образом:
var row:Number = Math.round( Math.abs((icon.y+icon.height/2) - grid.y) / (grid.width/2))+1;
Примечание. Я не тестировал этот код, но теоретически он должен работать.