Просмотр полной версии : Правильное обращение к мувикам.
nOobCrafter
11.12.2008, 16:58
Даже не знаю как это все корректно изложить. Делаю каталог, все данные беру из хмл, соответственно строю что то по аналогии меню. В роли кнупок - заголовки, при нажатии на заголовок происходит смещение всех заголовков что находятся ниже вниз, на величину высоты раздела (не в этом суть правда) Вот непонимаю вообще как обратиться к нижестоящим кнопкам?
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
гхым.. соори забылся) он идет выше:
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
// массив с данными
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
Вот попробовал сделать по тем советам что получил. Вроде бы работает корректно, посмотрите пожлуйста все ли верно и может можно что нибудь оптимизировать. В частности использование аттачмуви вместо дубликейт.
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"
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 всего то. А это просто для наглядности.
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 все ок, все как надо, но стоит добавить флаги как мы какую то полную ерунду получаем. Проблема вылечилась путем изменения порядка с:
function btns_on_release(){
for( var i = this.j; i < total_j - 1; i++) {
if(!this.flag){
trace(i)
}
this.flag = !this.flag;
}
}
на:
function btns_on_release(){
if(!this.flag){
for( var i = this.j; i < total_j - 1; i++) {
trace(i)
}
}
this.flag = !this.flag;
}
Может если кому потом надо будет.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.