Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Реализация драг энд дропа. В тесте. (http://www.flasher.ru/forum/showthread.php?t=99007)

wellskii 26.07.2007 13:36

Реализация драг энд дропа. В тесте.
 
Необходимо создать тест, в котором надо будет правильно расставить предложения.Т.Е. смысл такой пользователь нажимает на предложение(полагаю что оно будет отдельным обьектом), перетаскивает его на его положенное место, а предложение которое стояло на этом месте уходит на место перетаскиваемого(т.е. они просто меняются местами). Пока не могу даже предположить, как это можно сделать. Буду рад любому совету по теме.....

Wolsh 26.07.2007 13:56

Это же в стандартном наборе темплейтов есть
файл - новый - темплейт - quiz (по крайней мере в восьмерке)
Или у Вас конкретно с переменой мест проблемы?
Клипы с предложениями... Тащите. Отпустили - хиттест
Определяете какой клип под вашим и ему ставите _х _у того которого тащили (какие они были до перетаскивания разумеется)
Всё может осложниться только разными размерами клипов.

Например вот так

wellskii 26.07.2007 14:12

спасибо... буду сейчас пробовать....

Спасибо за пример... сейчас буду логику разбирать :)

Wolsh 26.07.2007 15:26

Да, еще на онРелизы надо добавить, что если все хиттесты отрицательные, клип возвращается на свое положение, чтоб не валялся тупо где попало
Ну и по-уму бы надо все в одну функцию записать, а не копировать действия для каждого клипа. Ладно их тут три, а если пятнадцать?

////////////////////////// апдейтед /////////////////////////////

в общем у меня вот так сокращенно получилось для трех клипов
(можно этот код прямо в тот пример вставить вместо прежнего)

Код:

var dragged_x=null  //  здесь будем записывать координаты
var dragged_y=null  //  клипа перед тем как его тащить
Num = 3              //  количество клипов всего, маска их имени - mc_#_mc
for(n=1; n<Num+1; n++){  // по циклу перебираем мувики и вешаем ролловер-функции
        _root['mc_'+n+'_mc'].onPress = function(){          // при нажатии
        this.swapDepths(_root.getNextHighestDepth());  // ставим выше всех
        this._alpha = 50                // делаем полупрозрачным
        _root.dragged_x=this._x          // записываем исходные координаты
        _root.dragged_y=this._y
        this.startDrag();                // разрешаем тащить
        }
        _root['mc_'+n+'_mc'].onRelease = _root['mc_'+n+'_mc'].onReleaseOutside = function(){
        this._alpha = 100
        Drop(this);                          // при отпускании - функция Дроп
        }
}//end for
///////////////////////////////////////////////////////
function Drop(clip:MovieClip){
        clip.stopDrag();            //  останавливаем таскалку
        not1 = not2 = not3 = false  // флаги удачности хиттеста
        clip!=mc_1_mc ? clip.hitTest(mc_1_mc) ? Replace(clip, mc_1_mc) : not1=true : not1=true;
        clip!=mc_2_mc ? clip.hitTest(mc_2_mc) ? Replace(clip, mc_2_mc) : not2=true : not2=true;
        clip!=mc_3_mc ? clip.hitTest(mc_3_mc) ? Replace(clip, mc_3_mc) : not3=true : not3=true;
        // если ни с кем не пересеклись - отправляем клип на прежнее место
        (not1 & not2 & not3) ? Replace(clip, clip) : null;
}
///////////////////////////////////////////////////////
function Replace(sourceclip:MovieClip, clip:MovieClip){
        sourceclip._x = clip._x;    // присваиваем нашему клипу координаты
        sourceclip._y = clip._y;    // того клипа, с которым он пересекся
        clip._x = _root.dragged_x;  // а этот клип отправляем на исходные
        clip._y = _root.dragged_y;  // координаты нашего клипа
        }



Часовой пояс GMT +4, время: 03:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.