Просмотр полной версии : Drag and Drop
Господа помогите разобраться с Drag and drop разных объектов во флешке.
Надо, чтобы при нажатии кнопки мыши на объекте, объект зацеплялся, пока нажата кнопка и мышка двигается, объект перемещался, а когда отпускали кнопку мышки, объект оставался бы там, где он есть.
Я понимаю, что это простая вещь, но никак не могу своим умом с помощью helpa додуматься.
my_mc.onPress = function(){
this.startDrag(false);
}
my_mc.onRelease = function(){
this.stopDrag();
}
вот пример из книги - на столе есть 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;
}
}
K'el, для оформления своего кода, надо использовать теги .
my_mc.onPress = function(){
this.startDrag(false);
}
my_mc.onRelease = function(){
this.stopDrag();
}
Получилось. Спасибо огромное :)
вот пример из книги - на столе есть 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. Выдаются ошибки при компиляции :(
Куда этот код надо вставить?
лучше всего - создать отдельный слой и на нем, где-нибудь вне отображаемого поля поместить какой-нибудь мувик. Код поместить в этом мувик. У меня именно так работает.
А вообще, если хочешь, напиши на Vyacheslav-vrn(собака)yandex.ru - скину исходник.
FlashRus
17.11.2006, 07:54
Конвертируеш свой обект в кнопку и пишеш в нем:
on (press) {
startDrag (_parent.obect);
}
on (release) {
stopDrag ();
}
2 FlashRus: теги QUOTE и CODE это разные вещи.
_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, тем что плавнее двигает объекты. И, кстати, при желании двигает несколько объектов.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.