Просмотр полной версии : снова про swapDepth
Здравствуйте всем,
есть проект, суть которого в том, что имеется несколько бегунков, которые перемещаются по горизонтали. Причем при перетаскивании определенного бегунка он должен выходить на передний план, перекрывая все остальные. Для этого создаю динамически несколько клипов-контейнеров, в которых есть свои дочерние клипы
ItemClip[i] = _root.createEmptyMovieClip ("_item." + i.toString(), _root.getNextHighestDepth());
ItemImage[i] = ItemClip[i].createEmptyMovieClip ("_image." + i.toString(), ItemClip[i].getNextHighestDepth());
Далее, к каждому клипу привязываю событие drag_drop, в котором выполняю следующий код
this.swapDepths(_root.getNextHighestDepth());
Но смены глубины не происходит и последний клип всегда остается выше остальных. Как можно еще решить проблему?
Спасибо!
1. Потрейсите значение уровней.
2. Приведите полный код, вот это:
"к каждому клипу привязываю событие drag_drop" ничего не проясняет.
Что значит "привязываю", что за событие drag_drop - загадка.
TihelpER
03.12.2009, 12:42
Покажи весь код целиком. Не очевидно на какой клип ты вешаешь событие и куда будет ссылаться this.
Инициализация ролика
//Инициализируем вопрос
function InitQuestion(ScaleUrl:String, ItemUrl:String)
{
Params = new InitialPars(ScaleUrl, ItemUrl);
//Вставляем линейку
if (Params.ScaleUrl != "")
{
//делаем клип
var ScaleMCL:MovieClipLoader = new MovieClipLoader();
var ScaleCompleteListener:Object = new Object();
ScaleMCL.addListener(ScaleCompleteListener);
ScaleCompleteListener.onLoadInit =
function (SrcClip)
{
SrcClip._x = 0;
SrcClip._y = DocumentHeight - SrcClip._height;
}
ScaleClip = _root.createEmptyMovieClip ("_scale", _root.getNextHighestDepth());
ScaleMCL.loadClip(ScaleUrl, ScaleClip);
}
len = Params.Items.length;
ItemClip = new Array(len);
ValueOut = new Array(len);
var ItemImage:Array = new Array(len);
//Собираем ползунки
for (i = 0; i < len; i++)
{
var ItemMCL:MovieClipLoader = new MovieClipLoader();
var ItemCompleteListener:Object = new Object();
ItemMCL.addListener(ItemCompleteListener);
ItemCompleteListener.onLoadInit =
function (SrcClip)
{
id = SrcClip._name.split(".")[1];
SrcClip._parent.height = (SrcClip._height + 40) * 2;
SrcClip._y = (SrcClip._height + 40) / 2;
PointerClip = SrcClip._parent.attachMovie("pointer", "_pointer", SrcClip._parent.getNextHighestDepth());
PointerClip._x = (SrcClip._width / 2) - 10;
PointerClip._y = SrcClip._y + SrcClip._height;
SrcClip._parent._y = DocumentHeight - (ScaleClip == null ? 0 : ScaleClip._height) - (SrcClip._parent.height * 0.75) - Params.Removal;
dragAndDrop(SrcClip._parent, SrcClip._parent._y, 71, parseInt(id));
}
ItemClip[i] = _root.createEmptyMovieClip ("_item." + i.toString(), _root.getNextHighestDepth());
ItemImage[i] = ItemClip[i].createEmptyMovieClip ("_image." + i.toString(), ItemClip[i].getNextHighestDepth());
ItemMCL.loadClip(Params.Items[i], ItemImage[i]);
}
}
событие перетаскивания
function dragAndDrop(clip:MovieClip, initY, initDelta, index):Void
{
clip.onPress =
function()
{
var oldX = this._x;
var newX = oldX;
var oldY = initY;
var newY = oldY;
this.swapDepths(_root.getNextHighestDepth());
...
}
...
}
TihelpER
03.12.2009, 13:53
На первый взгляд должно работать.
Посмотри внутри функции dragAndDrop трэйсы:
// Место и уровень клипа до попытки поднять
trace("mc: " + this + "; depth: " + this.getDepth() + "; next depth: " + _root.getNextHighestDepth())
this.swapDepths(_root.getNextHighestDepth());
// Место и уровень клипа после попытки
trace("mc: " + this + "; depth: " + this.getDepth() + "; next depth: " + _root.getNextHighestDepth() + "\n -------")
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.