Форум 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)
-   -   drag&drop в прокручиваемом списке мувклипов (http://www.flasher.ru/forum/showthread.php?t=74144)

dimirlan 12.01.2006 20:04

drag&drop в прокручиваемом списке мувклипов
 
Всем привет.

1. Читаем txt файл
2. В массив его
3. На базе массива создаем динамически кнопки
4. Отображаем в окошке с скроллером эти кнопки списком
5. Когда хватаем одну кнопку и волокем ниже (выше), остальные соответсвенно смещаются на позицию, в которой та стояла.
6. Отслеживаем после перемещений новый список положения кнопок, который и гоним в переменную.

Вопрос, аднака, такой:
Есть ли что-либо похожее уже реализованное, (компонент какой)? Ежели нет, то хотя бы идейно, как это можно сделать (пп. 4-6).

Заранее благодарен всем за ответы. :p

KPaul 12.01.2006 20:47

Извини не понял:
Цитата:

остальные соответсвенно смещаются на позицию, в которой та стояла.
Какой в этих манипуляциях смысл? Какие потребности удовлетворяет эта функциональность? Рад бы подсказать готовое решение, но мне бы более общую картину...

dimirlan 12.01.2006 21:27

Вложений: 1
Спасибо за быструю реакцию :p.

Перетасовать местами нужно кнопки. Было: 1,2,3,4,5. Стало, к примеру, 1,5,2,3,4. Вручную я знаю как задать: Позицию 5 переместить на Позицию 2, затем меняем позицию в массиве, формируем строковую переменную на базе массива. Но хочется простым "перетаскиванием" сделать.

silin 12.01.2006 22:00

опа, как заинтриговал..
вручную, значит, уже не подходит, а хочется каким-то простым "перетаскиванием"..

dimirlan 12.01.2006 22:02

Ясно. Наверное плохо объяснил. :(

Грубо говоря есть таблица, каждая строка которой - кнопка (формируются динамически типа duplicateMovieClip). Мне нужно сделать, чтобы эта таблица прокручивалась скролом - раз, чтобы можно было менять кнопки местами "перетаскиванием" мышью - два, и чтобы отслеживались ID кнопок и я эту новую последовательность ID мог гнать в переменную - три.

Знаю как формировать таблицу текстовую, прокручиваемую (на базе стандартного компонента), но не знаю как реализовать на базе того же компонента динамическое формирование кнопок; знаю как менять местами в ней позиции строк и гнать этот список в переменную, но не догоняю как это реализовать drag-ом (отслеживать позицию по У, али как?).

Надеюсь, теперь ясно че хочу добиться. Если есть мысли какие - плз, пишите. Со всем уважением... :cool:

KPaul 13.01.2006 11:36

Используй дроптаргет.
Вот немного переделанный пример из хелпа:
Код:

origX = button1_mc._x;
origY = button1_mc._y;
button1_mc.onPress = function() {
    this.startDrag();
};
button1_mc.onRelease = function() {
    this.stopDrag();
    if (this._droptarget.indexOf("button")!=-1) {
    // Можно обойтись и без eval, но так нагляднее
    var target_mc = eval(this._droptarget);
    // Ну а дальше я думаю сообразишь
    } else {
    this._x = origX;
    this._y = origY;
    }
};


silin 13.01.2006 13:54

Вложений: 1
еще вариант (поживее):
при перетаскивании кнопки смотрим с кем из остальных хиттест, ну и отправляем ее на новое место..
Код:

import mx.transitions.*;
var nBut=5,buts=[],yPos=[],but=null, yGap=60, x0=50, y0=50
bPress=function(){
        this.startDrag(false,x0,yPos[0],x0,yPos[yPos.length-1]);
        this.onEnterFrame=function(){
                //смотрим с кем пересекаемся, кроме себя и кнопок не на месте
                for(var i=0;i<nBut;i++)        if(this!=buts[i] && this.hitTest(buts[i]) && buts[i]._y==yPos[buts[i].pos] )break;
                but=buts[i];
                if(!but)return;//если не с кем то выходим
                var tmp=but.pos;//меняемся позицией
                but.pos=this.pos,this.pos=tmp;
                new Tween(but, "_y", null, but._y, yPos[but.pos], 2);//двигаем на новую
        }
}
bRelease=function(){
        stopDrag();
        delete this.onEnterFrame;
        new Tween(this, "_y", null, this._y, yPos[this.pos], 1);//двигаем точно на позициюна
}
//расставляем кнопки
for(var i=0;i<nBut;i++){
        yPos.push(y0+i*yGap);
        buts.push(this.attachMovie('but',i,i,{_x:x0,_y:yPos[i],id:'#'+i,pos:i,onPress:bPress,onRelease:bRelease,onReleaseOutside:bRelease}));
}


dimirlan 13.01.2006 21:21

Большое спасибо, буду разбираться. :eek:

dimirlan 19.01.2006 02:22

"Попутный" вопрос
 
Вложений: 1
Добрый день, Silin.

Ну, в принципе вроде понятно.

Не получается заставить работать вложенные кнопки.

Прилагаю fla.

Верхний объект тягается и кнопки в нем работают, а когда множу, как ты
написал, не пашет. Наверное, неправильно обращаюсь к клипам.
Тут оставил только "чистый" код - свои художества убрал.

Если не трудно, подскажи, как это сделать?

Спасибо, с уважением

Dimirlan.
:)

silin 19.01.2006 10:41

проблема в перекрытии 'мышиных' событий дочерних объектов событиями родителя: у 'верхнего объекта' они не определены - кнопки работают,
у кнопок, которые таскаешь определены - внутренние уже не работают
возможные решения:
-вешать перетаскивание кнопок не на них самих, а на мувик/кнопку внутри..
-определять нажатие на внутренние через хиттест с мышью..
зы: я тут по мотивам недавнего обсуждения похожего вопроса (поиск рулит) класс приспособил решать эту задачу, тож глянь..


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

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