PDA

Просмотр полной версии : Не присваивается нужная глубина кнопке.


Sajaxt
12.01.2009, 02:23
Доброе время суток!

Я решил сделать менюшку напоминающую смену окон в висте.
Несколько кнопок, которые прячутся друг за дружкой, при нажатии на любую они меняются местами по кругу(в дальнейшем это должно будет происходить при вращении колёсика мышки...).
Меняются координаты и размеры в соответствии с положением кнопки, а также глубина кнопок, дабы они правильно друг дружку перекрывали.
Всё вродебы работает, НО кнопка с именем "b4" всегда находится поверх двух соседних, в то время как все остальные меняют свою шлуюину правильно.
Люди помогите плз не могу найти что я не так делаю.
Вот код плюс сам файл:


for(var i=0;i<5;i++){
this["b"+i]._alpha=50+10*(i+1);
}
//--------------------------------------------------------------------------------
var xx:Array = new Array(this.b0._x,this.b1._x,this.b2._x,this.b3._x,this.b4._x); // массив с координатам x
var yy:Array = new Array(this.b0._y,this.b1._y,this.b2._y,this.b3._y,this.b4._y); // массив с координатам y
var dep:Array = new Array(this.b0.getDepth(),this.b1.getDepth(),this.b2.getDepth(),this.b3.getDepth(),this.b4.getDepth());
// массив с глубинами кнопок
var mcs:Array = new Array("b0","b1","b2","b3","b4"); // массив с названиями кнопок
var mcs_:Array = new Array(); // массив с перемещёнными названиями кнопок
var z = 0; // количество перемещённых названий
//--------------------------------------------------------------------------------
function arr_dreh():Void{ // функция для перемещения названия кнопок в массиве
var d=0; // первый индекс не тронутого элемента mcs
for(var j=0;j<z+1;j++){ // копируем значение последнего элемента массива mcs в первый элемент mcs_
mcs_[z-j]=mcs[4-j];
}
for(var k=z+1;k<5;k++){
mcs_[k]=mcs[d]; // заполняем оставшиеся элементы mcs_ не тронутыми элементами mcs
d++; // индекс следующего не тронутого элемента mcs
}
if(z<4){z++;}else{z=0;} // увеличиваем количество перемещённых названий, если оно превышает возможное количество, онулирываем его
}
//--------------------------------------------------------------------------------
function change_urovenj(){
arr_dreh(); // Запускаем функцию перемещения названий кнопок
for(var c=0;c<5;c++){ // В соответствии с перемещёнными названиями кнопок, меняе свойства кнопок:
this[mcs_[c]]._alpha=50+10*(c+1); // прозрачность
this[mcs_[c]]._x=xx[c]; // x координата
this[mcs_[c]]._y=yy[c]; // y координата
this[mcs_[c]]._width=76+c*10; // широта
this[mcs_[c]]._height=22+c*5; // высота
this[mcs_[c]].swapDepths(dep[c]); // глубина
updateAfterEvent();
}
}
//--------------------------------------------------------------------------------

AlexCooper
12.01.2009, 05:30
Во первых использовать массивы крайне не красиво. Нужно как можно сокращать объем выделяемой памяти, а как мы знаем массивы очень ей любят попитаться.
Во вторых есть такие методы дебагинга как trace и метод жёсткого изменения. Тоесть отключить автоматическое изменение программы и "тыкать" в ручную.
В третих очень странно так как я со старта пытался клипу присвоить какую либо глубину, не случаеться. Какойто революционер БеЧетвёртый. ДУмал может сам мувик, подставлял другой, переменновывал, всё тоже. Другие свойства норм, а вот функция свапДептчь в БеЧетвёртом что балабол в банке. Он есть но толку ноль.

Добавлено через 4 минуты
Жаль, хочеться помочь но чтото не могу понять и сам в чём дело

the_scratch
12.01.2009, 11:17
Я не могу открыть файл, unexpected file format, у меня mx2004 7.2
Но мне кажется, ошибка в месте:
k=z+1;k<5;k++
По-моему, надо
k=z+1;k<6;k++
Хотя я не уверен, проверить-то не могу...

Sajaxt
12.01.2009, 12:34
2 the scratch

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

the_scratch
12.01.2009, 14:12
Sajaxt, вообще да, я чего-то ступил. Просто код так написан... Мне всё равно кажется, что где-то в arr_dreh() ошибка, ничего не могу с собой поделать.

Sajaxt
12.01.2009, 16:19
шизонуться можно только что сменил подход к изменению глубины а именно:


for(var a=0;a<=z;a++){
for(var b=(4-(a+1));b>=0;b--){
this["b"+(4-a)].swapDepths(this["b"+b]);
}
}


и всё бестолку

AlexCooper
12.01.2009, 16:55
Там не в сортировке дело, я кидал "б4" на минусовую глубину, и она была минусовая, а все остальные "плюсовые". И что? А ничего, хоть глубины разные но "б4" слишком гордый и висит выше всех. Пробывал распределить кнопки по слоям, тот же эффект. Не знаю всё дело в имени, но странно как то эт.

Sajaxt
12.01.2009, 18:47
добавил новую кнопку, с именем b5. Теперь она сопротивляется изменению свойств!

AlexCooper
12.01.2009, 20:33
Проблема в самом swapDepths() он не работает!!! Пробуйте сами динамичеси изменить глубину, не получиться!!!
function change_urovenj(){

bx=_root.b0._x;
by=_root.b0._y;
bw=_root.b0._width;
bh=_root.b0._height;
bd=_root.b0.getDepth();

for(var c=0;c<4;c++)
{
//_root[mcs_[c]]._alpha=50+10*(c+1); // прозрачность
_root['b'+c]._x=_root['b'+(c+1)]._x; // x координата
_root['b'+c]._y=_root['b'+(c+1)]._y; // y координата
_root['b'+c]._width=_root['b'+(c+1)]._width; // широта
_root['b'+c]._height=_root['b'+(c+1)]._height; // высота

_root['b'+c].swapDepths(_root['b'+(c+1)]); // глубина
}

_root.b4._x=bx;
_root.b4._y=by;
_root.b4._width=bw;
_root.b4._height=bh;
_root.b4.swapDepths(bd);

updateAfterEvent();
}

UPD: Просто попробуйте прописать к примеру b1.swapDepths(666);trace(b1.getDepth())

Sajaxt
12.01.2009, 21:10
Ладно, swapDepths не работает, а что теперь делать? есть конечно идея создать есче одну не видимую кнопку.. чтобы она была поверх всего. Но как то это не правильно :(

AlexCooper
12.01.2009, 21:11
Выход? function change_urovenj(){

bx=_root.b0._x;
by=_root.b0._y;
bw=_root.b0._width;
bh=_root.b0._height;
bd=_root.b0.getDepth();


for(var c=0;c<4;c++)
{
//_root[mcs_[c]]._alpha=50+10*(c+1); // прозрачность
_root['b'+c].duplicateMovieClip('b1'+c, (_root['b'+(c+1)].getDepth()+100));
_root['b'+c].removeMovieClip();

_root['b1'+c].duplicateMovieClip('b'+c, (_root['b1'+c].getDepth()-100));
_root['b1'+c].removeMovieClip();

_root['b'+c]._x=_root['b'+(c+1)]._x; // x координата
_root['b'+c]._y=_root['b'+(c+1)]._y; // y координата
_root['b'+c]._width=_root['b'+(c+1)]._width; // широта
_root['b'+c]._height=_root['b'+(c+1)]._height; // высота

}
c=4;
_root['b'+c].duplicateMovieClip('b1'+c, _root['b'+(c+1)].getDepth()+100);
_root['b'+c].removeMovieClip();

_root['b1'+c].duplicateMovieClip('b'+c, _root['b'+c].getDepth()-100);
_root['b1'+c].removeMovieClip();

_root.b4._x=bx;
_root.b4._y=by;
_root.b4._width=bw;
_root.b4._height=bh;
_root.b4.swapDepths(bd);


updateAfterEvent();
}
если б, но твои кнопки не потдаються ничему, ни дубликации, ни ремуву.

Добавлено через 9 минут
Так вот, выделяем по однок кнопке, нажимаем F8, тоесть содаём MovieCLip (а в нём кнопка), метим этот мувик как b0,b1...b4 вешаем на мувики свойства он релейс используем этот код
function change_urovenj(){

bx=_root.b0._x;
by=_root.b0._y;
bw=_root.b0._width;
bh=_root.b0._height;
bd=_root.b0.getDepth();

for(var c=0;c<4;c++)
{
//_root[mcs_[c]]._alpha=50+10*(c+1); // прозрачность
_root['b'+c]._x=_root['b'+(c+1)]._x; // x координата
_root['b'+c]._y=_root['b'+(c+1)]._y; // y координата
_root['b'+c]._width=_root['b'+(c+1)]._width; // широта
_root['b'+c]._height=_root['b'+(c+1)]._height; // высота

_root['b'+c].swapDepths(_root['b'+(c+1)]); // глубина
}

_root.b4._x=bx;
_root.b4._y=by;
_root.b4._width=bw;
_root.b4._height=bh;
_root.b4.swapDepths(bd);

updateAfterEvent();
}
и радуемся жизни.

P.S. remoteMovieClip , DuplicateMovie, swapDepth не реагируют на КНОПКИ.
P.S.S. наконец истина восторжествовала

Sajaxt
13.01.2009, 12:59
Всё заработало, создал шесть мувиков в них пизнул кнопки, и меняю свойства мувиков, ПАСИБО БОЛЬШОЕ!!!!

Плюс изменил алгоритм, дабы не было массивов:

for(var i=0;i<6;i++){
this["b"+i]._alpha=40+10*(i+1);
}
//--------------------------------------------------------------------------------
var z = 0; // количество перемещённых названий
//--------------------------------------------------------------------------------
function swap_properties(A,B):Void{
var Z=0;
Z = _root["b"+A]._alpha;
_root["b"+A]._alpha = _root["b"+B]._alpha;
_root["b"+B]._alpha = Z;
Z = _root["b"+A]._x;
_root["b"+A]._x = _root["b"+B]._x;
_root["b"+B]._x = Z;
Z = _root["b"+A]._y;
_root["b"+A]._y = _root["b"+B]._y;
_root["b"+B]._y = Z;
Z = _root["b"+A]._width;
_root["b"+A]._width = _root["b"+B]._width;
_root["b"+B]._width = Z;
Z = _root["b"+A]._height;
_root["b"+A]._height = _root["b"+B]._height;
_root["b"+B]._height = Z;
_root["b"+A].swapDepths(_root["b"+B]);
}
//--------------------------------------------------------------------------------
function change_urovenj(){
for(var b=1+z;b<6;b++){
swap_properties(6-z,6-b);
}
for(var h=0;h<z;h++){
swap_properties(6-z,6-h);
}
if(z<5){
z++;
}else{
z=0;
} // увеличиваем количество перемещённых названий, если оно превышает возможное количество, сбрасываем на еденицу

}
//--------------------------------------------------------------------------------