Форум 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=119078)

nOobCrafter 11.12.2008 16:58

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

Код AS1/AS2:

function Catalog_create_item_list():Void 
{
                var Catalog_list = Catalog.Catalog_item_list.duplicateMovieClip("Catalog_item_list"+j, j);
                Catalog_list._y = 0;
                Catalog_list.no = j;  // присваиваем св-ву значение переменной для дальнейшей работы с ней
                Catalog_list.Header_button._x = 0;
                Catalog_list.Header_button._y = 0;
                trace(j)
 
                Catalog_list.Header_button.onRelease = function () // при нажатии на эту кнопку должно происходить смещение, но как реализовать адресация непонимаю(((:wacko:
                        {
                        //trace(this)
                        //var tween_1:Tween = new Tween(this._parent, "_y", Strong.easeOut, this._parent._y, this._parent._y + 100, 1, true);     
                        //var tween_2:Tween = new Tween(this._parent, "_alpha", Strong.easeOut, 0, 100, 1, true);
// пр этих 2х действия реагирует только раздел к которому относится кнопка соответственно.
                }
                if (j>0) {  Catalog_list._y =offset_j;      }    // расчитывем расстояние до след раздела
                        else {        Catalog_list._y = j * offset_j;  }
 
                        offset_j = Catalog_list._y + Catalog_list.Catalog_header._height + item_spacing;
}

И при трейсе Catalog_list.no - получаем undefined((

Mnilionic 11.12.2008 17:02

а где сам цикл? или откуда у вас j берётся

nOobCrafter 11.12.2008 17:26

гхым.. соори забылся) он идет выше:
Код AS1/AS2:

xml.onLoad = function(success:Boolean) {     
if (success)
{
        Catalog.Catalog_item_list.Catalog_fm_item._visible = false;
        Catalog.Catalog_item_list._visible = false;
 
        var nodes_j = this.firstChild.childNodes;
        total_j = nodes_j.length;
 
        for( j = 0; j < total_j; j++)
        {
                Catalog_header[j] = nodes_j[j].attributes.razdel;
                Catalog_create_item_list();   
        }
}
}
xml.load( "Docs_Download.xml" );
xml.ignoreWhite = true;

То есть тут мы вызываем эту функцию, а потом описываем.

Mnilionic 11.12.2008 17:29

передавайте j как параметр

Код:

Catalog_create_item_list(j);

nOobCrafter 11.12.2008 17:42

Иии... А как мне к клипам то обращаться?

Mnilionic 11.12.2008 18:03

создать массив клипов. при клике по клипу, в цикле обращаться к клипам выше или ниже индекса выбранного.

nOobCrafter 11.12.2008 18:12

Нда..я сегодня наверно туплю в конец. %)...можешь показать пример или показать похожую тему?..
З.Ы. то етсь после создани ямассива клипов ты предлагаешь обращаться в ним по типу Catalog_list[j]?

Mnilionic 11.12.2008 23:37

например, да

nOobCrafter 15.12.2008 14:45

Можно небольшой пример в студию? Например как выглядит использование функции типа function(i) и обращение к обьектам внутри ее если не сложно? А то я себе что то плохо представляю как это выглядит...

Mnilionic 15.12.2008 19:21

Код AS1/AS2:

// массив с данными
var my_array = ['Angelina Jolie', 'Charlize Theron'];
 
 
function whois(i){
        // обращение к данным из массива по ключу
        trace('Today I love ' + my_array[i]);       
}
 
 
// запускаем функцию
whois(0);


nOobCrafter 16.12.2008 15:52

Вот попробовал сделать по тем советам что получил. Вроде бы работает корректно, посмотрите пожлуйста все ли верно и может можно что нибудь оптимизировать. В частности использование аттачмуви вместо дубликейт.
Код AS1/AS2:

import mx.transitions.Tween;
import mx.transitions.easing.*;
// массив с данными
var my_array = ['Angelina Jolie', 'Charlize Theron', 'Памелла Андерсон', 'Бритни гг'];
var clip_array:Array = new Array()// будущий массив кнопок
var total_j:Number;
var i:Number = 0;
var j:Number = 0;
var offset_j:Number = 0;
but._visible = false;            // танец с бубном ;) Итак что же мы получаем, при дубликации обьекта, исходный то у нас тоже отображается, что не есть гут. Поэтому прячем его.
 
function whois(j){
        // обращение к данным из массива по ключу
        trace('Today I love ' + my_array[j]);       
}
function create_buttons(j)  // cсоздаем кнопки, не знаю как это назвать (j)
{
        clip_array[j] = but.duplicateMovieClip("but"+j, j)// присваиваем массиву значения кнопок
                clip_array[j]._visible = true;  // танец с бубном часть 2 ;) А затем показываем уже дублицированный, конечно можно было аттачить, но я пока этим не пользуюсь.
                clip_array[j].onRelease = function()
                {
                        for ( i = j; i  < 4; i++)
                        {
                        if(!this.flag){       
                                var tween_1alphadown:Tween = new Tween(clip_array[i + 1], "_alpha", Strong.easeOut, 0, 100, 1, true);
                                }
                                else{
                                var tween_1alphaup:Tween = new Tween(clip_array[i + 1], "_alpha", Strong.easeOut, 0, 100, 1, true);
                                }
                                this.flag = !this.flag;
                        }
                whois(this.mark)// ваш пример
                }
                if (j>0) {  clip_array[j]._y = offset_j;      }    // расчитывем расстояние до след раздела
                        else {        clip_array[j]._y = j * offset_j;  }
 
                offset_j = clip_array[j]._y + clip_array[j]._height + 5// 5 это межкнопочное расстояние
}
 
for( j = 0; j < 4; j++)
        {
                create_buttons(j) // сделал функцию как говорили
        }

На рабочем столе (имею в виду рабочий стол флеша, а не винды) есть прямоугольник под именем but и инстанс нейм тоже but/

Mnilionic 16.12.2008 17:12

удаляем с рабочего стола "прямоугольник".
в библиотеке ставим ему linkage Property:
галка на "Экспорт фо экшн скрипт" и на "Экспорт ин фёст фрейм"
в поле id вписываем "but_in_lib"

Код AS1/AS2:

import mx.transitions.Tween;
import mx.transitions.easing.*;
// массив с данными
var my_array = ['Angelina Jolie', 'Charlize Theron', 'Памелла Андерсон', 'Бритни гг'];
var clip_array:Array = new Array()// будущий массив кнопок
var total_j:Number = 4;
var btns_space:Number = 5; // межкнопочное расстояние
 
function whois(j){
        // обращение к данным из массива по ключу
        trace('Today I love ' + my_array[j]);       
}
 
// cсоздаем кнопки, присваеиваем события и прочие свойства.
function create_buttons(j){
        // аттачим клип (кнопку) на сцену
        var btn = this.attachMovie('but_in_lib', 'but_' + j, j);
        //и сохраняем ссылку в массив
        clip_array[j] = btn;
 
        // расчитывем расстояние до след раздела
        btn._y = j * (btn._height + btns_space);
        btn._x = 200
        btn.j = j;// запоминаем в кнопке её номер
        btn.flag = false // в функции события он у вас используется
        btn.onRelease = btns_on_release;
}
 
// описываем событие
function btns_on_release(){
        for( var i = this.j; i < total_j; i++) {
                if(!this.flag){        // логика этих твинов мне не понятна...
                        var tween_1alphadown:Tween = new Tween(clip_array[i + 1], "_alpha", Strong.easeOut, 0, 100, 1, true);
                }else{
                        var tween_1alphaup:Tween = new Tween(clip_array[i + 1], "_alpha", Strong.easeOut, 0, 100, 1, true);
                }
                this.flag = !this.flag;
        }
        whois(this.j)// ваш пример
}
 
 
 
// запускаем создание кнопок
for( var j = 0; j < total_j; j++ ){
        create_buttons(j) // сделал функцию как говорили
}


nOobCrafter 16.12.2008 17:29

Спс.. ну эти твины меняют прозраность тех клипов что ниже нажатой кнопки, в оригинале мне их надо смещать, поэтому вместо альфы будет ._y всего то. А это просто для наглядности.
Код AS1/AS2:

btn.flag = false // в функции события он у вас используется

Вот еще вопрос, надо ли нам указывать значение флага заранее. Ведь условие происходит корректно, сразу значение undefined что неравно true, и выполнеятся прописанное условие, в конце функции значение флага принимает true.

Mnilionic 16.12.2008 17:43

ну раз уж вы используете объявление переменных и их типизацию, почему не объявить флаг :)
лично для меня удобней и наглядней.

Добавлено через 3 минуты
чтоб не выходить за пределы массива.
Код:

function btns_on_release(){
        for( var i = this.j; i < total_j - 1; i++) {
                var btn = clip_array[i + 1]; // идальше работать напрямую с ссылкой, а не с масивом
                ...


nOobCrafter 16.12.2008 18:14

Ясна. спс хотя последнее явно лишнее, мне так нагляднее будет видно что да как используется. А про типизацию щас поищу инфу и почитаю, а то даже не знаю о чем речь.

Добавлено через 21 час 39 минут
Блин, дошло дело до использования функций перемещения и открылся еще один косяк. При простом трейсе i все ок, все как надо, но стоит добавить флаги как мы какую то полную ерунду получаем. Проблема вылечилась путем изменения порядка с:
Код AS1/AS2:

function btns_on_release(){
        for( var i = this.j; i < total_j - 1; i++) {
                if(!this.flag){
                    trace(i)
                }
                this.flag = !this.flag;
          }
}

на:
Код AS1/AS2:

function btns_on_release(){
          if(!this.flag){
                for( var i = this.j; i < total_j - 1; i++) {
                    trace(i)
                }
          }
          this.flag = !this.flag;
}

Может если кому потом надо будет.


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

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