PDA

Просмотр полной версии : Drag and Drop


kdv
15.11.2006, 15:17
Господа помогите разобраться с Drag and drop разных объектов во флешке.
Надо, чтобы при нажатии кнопки мыши на объекте, объект зацеплялся, пока нажата кнопка и мышка двигается, объект перемещался, а когда отпускали кнопку мышки, объект оставался бы там, где он есть.

Я понимаю, что это простая вещь, но никак не могу своим умом с помощью helpa додуматься.

wvxvw
15.11.2006, 19:25
my_mc.onPress = function(){
this.startDrag(false);
}
my_mc.onRelease = function(){
this.stopDrag();
}

K'el
15.11.2006, 22:53
вот пример из книги - на столе есть 13 клипов, с именами от part1 до part13. При наведении мыши на клип и зажатии кнопки клип двигается вместе с мышью.

// start with nothing dragging
onClipEvent (load) {
dragPart = 0;
}

// start drag
onClipEvent (mouseDown) {
// get current location
x = _root._xmouse;
y = _root._ymouse;

// find which, if any, part the cursor is over
for(i=1;i<=13;i++) {
if (_root["Part"+i].hitTest(x,y, true)) {
// set to drag this part, remember offset
dragPart = i;
offsetx = _root["Part"+i]._x - x;
offsety = _root["Part"+i]._y - y;
break;
}
}

}

// end drag
onClipEvent (mouseUp) {
dragPart = 0;
}

// if dragging, set new position
onClipEvent (enterFrame) {
if (dragPart > 0) {
_root["Part"+dragPart]._x = _root._xmouse + offsetx;
_root["Part"+dragPart]._y = _root._ymouse + offsety;
}
}

iNils
15.11.2006, 23:06
K'el, для оформления своего кода, надо использовать теги .

K'el
15.11.2006, 23:26
sorry - не знал.

kdv
16.11.2006, 10:05
my_mc.onPress = function(){
this.startDrag(false);
}
my_mc.onRelease = function(){
this.stopDrag();
}

Получилось. Спасибо огромное :)

kdv
16.11.2006, 10:10
вот пример из книги - на столе есть 13 клипов, с именами от part1 до part13. При наведении мыши на клип и зажатии кнопки клип двигается вместе с мышью.

// start with nothing dragging
onClipEvent (load) {
dragPart = 0;
}

// start drag
onClipEvent (mouseDown) {
// get current location
x = _root._xmouse;
y = _root._ymouse;

// find which, if any, part the cursor is over
for(i=1;i<=13;i++) {
if (_root["Part"+i].hitTest(x,y, true)) {
// set to drag this part, remember offset
dragPart = i;
offsetx = _root["Part"+i]._x - x;
offsety = _root["Part"+i]._y - y;
break;
}
}

}

// end drag
onClipEvent (mouseUp) {
dragPart = 0;
}

// if dragging, set new position
onClipEvent (enterFrame) {
if (dragPart > 0) {
_root["Part"+dragPart]._x = _root._xmouse + offsetx;
_root["Part"+dragPart]._y = _root._ymouse + offsety;
}
}

Что-то не получается :(
Перепробовал все, что знал. Задавал имена для клипов при конвертации в Symbol. Задавал имена в Properties. Код пытался вставить в разные "места": во Frame, в Symbol. Выдаются ошибки при компиляции :(
Куда этот код надо вставить?

K'el
17.11.2006, 00:57
лучше всего - создать отдельный слой и на нем, где-нибудь вне отображаемого поля поместить какой-нибудь мувик. Код поместить в этом мувик. У меня именно так работает.

А вообще, если хочешь, напиши на Vyacheslav-vrn(собака)yandex.ru - скину исходник.

FlashRus
17.11.2006, 07:54
Конвертируеш свой обект в кнопку и пишеш в нем:
on (press) {
startDrag (_parent.obect);
}
on (release) {
stopDrag ();
}

iNils
17.11.2006, 17:22
2 FlashRus: теги QUOTE и CODE это разные вещи.

Kikasso
17.11.2006, 23:45
_global.startFollowMouse = function(dx, dy){
if(this.drag )return;
this.drag = true;
var dx = dx == undefined ? this._x - this._parent._xmouse : dx;
var dy = dy == undefined ? this._y - this._parent._ymouse : dy;
this.onMouseMove = function(){
this._x = this._parent._xmouse + dx;
this._y = this._parent._ymouse + dy;
updateAfterEvent();
}
this.onMouseMove();
}
_global.stopFollowMouse = function(){
this.onMouseMove = null;
this.drag = false;
}
Этот код вставляешь куда угодно, желательно чтобы он выполнялся только один раз.
Теперь ты можешь сказать клипу с именем my_mc:

my_mc.onPress = startFollowMouse;
my_mc.onRelease = stopFollowMouse;
Если надо, чтобы клипчик к мышке подскакивал - пишешь
my_mc.onPress = function(){ startFollowMouse( 0, 0); };
Этот способ лучше стандартного startDrag, тем что плавнее двигает объекты. И, кстати, при желании двигает несколько объектов.