Как создать слой сетки в Flash / AS3 и определить, в каких квадрантах размещены значки? - PullRequest
0 голосов
/ 19 мая 2011

Доброе утро,

У меня есть приложение Flash, в котором есть слой, содержащий квадрат, разделенный на 4 квадранта.Пользователю предоставляется набор значков, и его / ее просят перетащить каждый значок в один из квадрантов.

Предоставляет ли Flash / AS3 способ создания сетки (не обязательно DataGrid), которая перекрывает существующее изображение?Если да, то как настроить синтаксис AS3 для сохранения квадранта, в котором находится значок?

Большое спасибо !!

1 Ответ

1 голос
/ 22 мая 2011

Если я правильно понимаю ваш вопрос, у вас есть сетка 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;

Примечание. Я не тестировал этот код, но теоретически он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...