PDA

Просмотр полной версии : снова про swapDepth


a_web
03.12.2009, 12:37
Здравствуйте всем,

есть проект, суть которого в том, что имеется несколько бегунков, которые перемещаются по горизонтали. Причем при перетаскивании определенного бегунка он должен выходить на передний план, перекрывая все остальные. Для этого создаю динамически несколько клипов-контейнеров, в которых есть свои дочерние клипы


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());


Но смены глубины не происходит и последний клип всегда остается выше остальных. Как можно еще решить проблему?

Спасибо!

mooncar
03.12.2009, 12:42
1. Потрейсите значение уровней.
2. Приведите полный код, вот это:
"к каждому клипу привязываю событие drag_drop" ничего не проясняет.
Что значит "привязываю", что за событие drag_drop - загадка.

TihelpER
03.12.2009, 12:42
Покажи весь код целиком. Не очевидно на какой клип ты вешаешь событие и куда будет ссылаться this.

a_web
03.12.2009, 12:52
Инициализация ролика


//Инициализируем вопрос
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 -------")