Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Не присваивается нужная глубина кнопке. (http://www.flasher.ru/forum/showthread.php?t=120090)

Sajaxt 12.01.2009 02:23

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

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

Код AS1/AS2:

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
Но мне кажется, ошибка в месте:
Код AS1/AS2:

k=z+1;k<5;k++

По-моему, надо
Код AS1/AS2:

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

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

Код AS1/AS2:

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() он не работает!!! Пробуйте сами динамичеси изменить глубину, не получиться!!!
Код AS1/AS2:

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: Просто попробуйте прописать к примеру
Код AS1/AS2:

b1.swapDepths(666);trace(b1.getDepth())


Sajaxt 12.01.2009 21:10

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


Часовой пояс GMT +4, время: 05:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.