![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 6
|
Организация перетаскивания
Как организовать перетаскивание объекта? Поскольку все задачи, связанные с отслеживанием положения указателя мыши и соответственным перемещением объекта, возложены на оператор startDrag, нам остается только правильно его применить. В технологии drag-and-drop принято, чтобы перемещение объекта вслед за мышью начиналось после нажатия на нем кнопки мыши и прекращалось после ее отпускания. Поэтому для отслеживания событий мыши на объекте удобно применить оператор on. Однако этот оператор допустим только в сценариях кнопки, следовательно, наш объект нужно сделать кнопкой. Но в операторе startDrag необходимо указать имя экземпляра, который необходимо перетаскивать, а кнопке "напрямую" имя дать нельзя. К счастью, мы можем в качестве имени использовать ключевое слово this, означающее текущий объект. Итак, откройте новый ролик, создайте в нем кнопку любого вида и поместите ее экземпляр в рабочую область. Теперь откройте окно сценария кнопки и введите туда такой код: on (press) { startDrag (this); } on (release) { stopDrag (); } Просмотрите ролик. В нем есть кнопка, которую можно перетаскивать с помощью мыши. Поскольку в сценарии кнопки в качестве имени объекта для перетаскивания указан текущий объект (this), можно создать множество копий этого объекта, и каждую из них можно перетаскивать мышью. Центрирование указателя Несколько более сложен случай, когда необходимо, чтобы указатель мыши находился точно в центре перетаскиваемого объекта. Для этого у оператора startDrag предусмотрен второй, необязательный аргумент. Если его значение равно true, то в момент начала перетаскивания объекта к указателю мыши "приклеивается" его центр. Но если просто изменить код предыдущего примера следующим образом on (press) { startDrag (this,true); } on (release) { stopDrag (); } то случится нечто, на первый взгляд непонятное: при нажатии кнопки мыши на объекте он отпрыгнет куда-то в сторону и начнет перемещаться в месте с указателем мыши, находясь на почтительном расстоянии от него. Более того, объект уже невозможно "освободить", поскольку для этого нужно отпустить кнопку мыши над объектом, а он находится в стороне! На самом деле в этом нет ничего удивительного. Поскольку наша кнопка расположена в основном ролике, то "центром" своим она считает начало координат основного ролика, то есть левый верхний угол. Поскольку первоначально объект находится, как правило, где-то в середине рабочей области, получается, что при выполнении оператора startDrag (this,true); перетаскиваемый объект перемещается так, чтобы находиться относительно указателя мыши в том же положении, в каком он раньше находился относительно левого верхнего угла ролика. Этого неприятного эффекта избежать очень легко, если поместить кнопку внутрь мувика. Начало координат мувика находится в его центре. Поэтому, если просто вставить кнопку в новый мувик (выделив ее в рабочей области и нажав F8), центр мувика автоматически совпадет с центром кнопки. Теперь мы можем спокойно написать on (press) ( startDrag (this,true); } on (release) { stopDrag (); } и просмотреть ролик. Теперь объект можно перетаскивать мышью, причем при нажатии кнопки мыши центр объекта совмещается с указателем мыши. Задание области перетаскивания При перетаскивании объекта можно ограничить область, в которой разрешено его перемещение. Для этого при операторе stratDrag нужно указать координаты прямоугольника, ограничивающего область перемещения, например, вот так: on (press) { startDrag (this,true,60,60,200,400); } on (release) { stopDrag (); } Четыре числа, стоящие после двух первых аргументов оператора startDrag, означают соответственно координаты левого верхнего (60, 60) и правого нижнего (200,400) углов невидимого прямоугольника, внутри которого разрешено перемещаться объекту (точнее, его центру). |
![]() |
Часовой пояс GMT +4, время: 07:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|