Показать сообщение отдельно
Старый 05.04.2010, 11:26
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Действия должны быть написаны в кадре перетаскиваемого клипа. То есть, заходим в клип для его редактирования, выделяем первый кадр, и пишем действия.

Код AS1/AS2:
onPress = function() {
    this.startDrag();
};
Тут, наверное, все понятно. Как только нажали на мувиклип, он начинает двигаться за мышкой. Можно, кстати, поставить startDrag(false), тогда клип не будет центроваться относительно курсора.

Код AS1/AS2:
onRelease = onReleaseOutside=function () {
    this.stopDrag();
    if(this.hitTest(maskClip)){
        this._visible = false;
        // На корзине
    } else {
        // Не на корзине
    }
};
Тут мы определяем, что произойдет, если отпустили мышкой этот клип. Определяем два события — когда отпустили мышкой над клипом (onRelease) и, заодно, когда отпустили мышкой не над клипом (onReleaseOutside).
Можно
Код AS1/AS2:
onRelease = onReleaseOutside = function...
заменить на
Код AS1/AS2:
onMouseUp = function...
тогда эта функция будет отрабатываться каждый раз, когда отпускаем кнопку мышки, вне зависимости от того, где нажали.

Внутри функции мы определяем, что же, все-таки произойдет по наступлению событий. В первую очередь, раз мышку отпустили, нам уже не надо таскать клип за курсором. Поэтому пишем
Код AS1/AS2:
this.stopDrag();
А дальше нужно проверить, положили ли мы клип на корзину, или же нет. Для этого мы ставим условие if, в котором пишем:
Код AS1/AS2:
this.hitTest(maskClip)
Функция hitTest возвращает значение true, если this (в данном случае это перетаскиваемый клип) пересекается с клипом, у которого instance name "maskClip". Пересечения отрабатываются по габаритным размерам клипов, как если бы клипы были прямоугольниками. Если клип - окружность, то hitTest вернет true, в случае, если другой клип "задевает" уголок прямоугольника, описывающего эту окружность.

Клип, с которым проверяется пересечение, должен иметь название, чтобы в коде с ним можно было работать, поэтому в поле instance name, когда этот клип выделен, нужно написать maskClip (или любое другое название).

Дальше по коду: если hitTest возвращает true, то значит, что условие для if верное, значит запустится блок кода, который сразу после if. В данном случае
Код AS1/AS2:
this._visible = false;
Меняя свойство _visible у перетаскиваемого клипа на значение false, мы указываем флэш-плееру, что этот клип не нужно показывать, он исчезает с экрана, но остается на сцене (то есть он не удаляется).

В случае, если условие в if не выполняется, то есть hitTest возвращает false (объекты не пересекаются), запускается блок кода, который стоит после else.
__________________
hauts.ru


Последний раз редактировалось Hauts; 05.04.2010 в 11:33.