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

3r0jan 10.01.2006 14:01

привязка функции к продублированной кнопке
 
что то никак не допру =/
может кто подскажет чего не так ?
Код:

for (var n = 0; n<1; n++) {
        this.pl.duplicateMovieClip("this.pl"+n,this.getNextHighestDepth());
        this["this.pl"+n]._y = this.pl._y+(n+1)*(this.pl._height+22);
        this["this.pl"+n] =this["this.pl"+n].onRelease = function() {
        this["this.k"+n] += 1
};

:confused:
k[n] это тпа дублированное текстовое поле k1 k2 k3 и т.д.
Код:

for (var n = 0; n<1; n++) {
        this.k.duplicateMovieClip("this.k"+n, this.getNextHighestDepth());
        this["this.k"+n]._y = this.k._y+(n+1)*(this.k._height+22);
        this["this.k"+n].k = 0
}

вобщем при нажатии на кнопки не прибавляется цифра

nyctota 10.01.2006 14:48

Ну, во-первых, не хвататет закрывающей фигурной скобки в конце =)
Во-вторых, зачем так запутываться? duplicateMovieClip возвращает ссылку на только что созданный им мувик -- пользуйся этим.

3r0jan 10.01.2006 14:55

Цитата:

Сообщение от nyctota
Ну, во-первых, не хвататет закрывающей фигурной скобки в конце =)
Во-вторых, зачем так запутываться? duplicateMovieClip возвращает ссылку на только что созданный им мувик -- пользуйся этим.

куда он возвращает ссылку ? как её использовать ? а скобку эт я когда копировал просто не выделил )

nyctota 10.01.2006 15:21

Возвращает -- значит возвращает =) Можно присвоить то, что возвращается функцией, какой-либо переменной и использовать её дальше. Например
Код:

my_pl = pl.duplicateMovieClip("pl"+n,this.getNextHighestDepth());
Далее все действия производить с my_pl.

Заодно уточни, что у тебя не получается и какую версию плеера ты используешь при публикации.

3r0jan 10.01.2006 15:35

вот что неполучается http://maramor.narod.ru/libero.swf
там же и исходник имеется с тем же именем может глянеш ?
флэш 8 пользую

nyctota 10.01.2006 15:42

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

П.С.: Писать за тебя код народу найдется немного. У меня не так много времени для этого. В конце-концов нужно это не мне. Поэтому не стоит сразу писать PM.

3r0jan 10.01.2006 15:48

ну вобщем дублирую я мувик k с текстовым полем k в нём что то вроде k1.k , k2.k , и так далее . при нажатии на тоже дублированую кнопку pl (pl1 , pl2)должно получаться сложение и в поле k мува k выводиться

nyctota 10.01.2006 15:55

Давай разбираться =)

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

Только надо бы выяснить, что ты там с чем складываешь?

3r0jan 10.01.2006 16:05

вобщем так ! сделал по твоему совету ! вроди получается да не так теперь вроди он выводит данные те что получаются при сложении только выводит в последнем продублированном муве хотя я нажимаю не на последнюю кнопку а на первую
Код:

for (var n = 0; n<2; n++) {
        my_k = this.k.duplicateMovieClip("this.k"+n, this.getNextHighestDepth());
        this.my_k._y = this.my_k._y+(n+1)*(this.my_k._height+22);
        this.my_k.k = 0;
        my_pl = this.pl.duplicateMovieClip("this.pl"+n, this.getNextHighestDepth());
        this.my_pl._y = this.my_pl._y+(n+1)*(this.my_pl._height+22);
        this.my_pl = this.my_pl.onRelease=function () {
                my_k.k += 1;
        };
}

вобщем есть главный мув в нём находится два мува(кнопки) и мув с динамическим текстовым полем в нём. я дублирую всё это делу ну к примеру два раза "n<2" далее я хочу чтоб при нажатии на дублированую кнопку pl2 к примеру в текстовом поле k мува k2 выводилось то что должно получиться вот тут
Код:

this.my_pl = this.my_pl.onRelease=function () {
                my_k.k += 1;
        };

а складываю 0 + 1 далее 1+1 далее 2+1 ну и так далее смотря сколько раз кликнеш

3r0jan 10.01.2006 17:09

ну мож кто подскажет а ? что делать то ?

nyctota 10.01.2006 18:17

Что делать, что делать? -- Думать!

Сделай мувик, В КОТОРОМ будут лежать и кнопка, и текстовое поле. Дублируй его сколько тебе надо. А на кнопку вешай действие
Код:

my_pl.onRelease=function () {
  this.k += 1;
};

Причем k в данном случае не текстовое поле, а переменная, ему присвоенная, по идее.

И я до сих пор не могу понять, зачем ты пишешь
Код:

this.my_pl = this.my_pl.onRelease = function()

3r0jan 10.01.2006 19:05

во спасибо работает
! а чё эт я не додумал то ? блин два дня думал =/
только теперь немогу с масивом разобраться ))) теперь по ходу дела кнопка добавить из каждого мува создаёт новый массив и им пользуется ))) а мне надо типа чтоб общий был

nyctota 10.01.2006 19:13

Это не так сложно. Подумай.
У тебя только что кнопки работали с одним текстовым полем, и ты пытался сделать, чтобы они работали каждая со своим.
Теперь нужно обратное -- один массив на все кнопки. Должен додуматься быстрее, чем за 2 дня, мне кажется ;) Удачи!

3r0jan 10.01.2006 19:20

:D спасибо !!!!

3r0jan 10.01.2006 21:00

блин что то недогоню разнае масивы создаёт хоть ты тресни чё поправить чтоб один был масив ?
Код:

// кнопки + и -
pl.onRelease = function() {
        k += 1;
};
mn.onRelease = function() {
        k -= 1;
        if (k<0) {
                k = 0;
        }
};
//создаём масив
A = new Array();
//Сортировка
function Com(A1, A2) {
        if (A1.x>A2.x) {
                return true;
        }
        return false;
}
function Sort() {
        A.sort(Com);
}
var fe_l = 0;
var fe_r = N0;
//Нахождение элемента
function FindElement(x) {
        fe_l = 0;
        fe_r = A.length-1;
        if (A[fe_l].x == x) {
                return fe_l;
        }
        if (A[fe_r].x == x) {
                return fe_r;
        }
        m = Math.round((fe_r+fe_l)/2);
        while (m != fe_l && m != fe_r) {
                if (A[m].x == x) {
                        return m;
                }
                if (A[m].x<x) {
                        fe_l = m;
                } else {
                        fe_r = m;
                }
                m = Math.round((fe_r+fe_l)/2);
        }
        return -1;
}
//Добавление элемента
function AddElement(x, caption) {
        res = FindElement(x);
        Obj = new Object();
        Obj = {x:x, caption:caption};
        A.push(Obj);
        if (x>A[A.length-2].x) {
                return A.length-1;
        }
        if (x>A[fe_l]) {
                index = fe_r;
        } else {
                index = fe_l;
        }
        for (i=A.length-1; i>index; i--) {
                A[i] = A[i-1];
        }
        A[index] = Obj;
        return index;
}
//Удаление элемента из масива
function DelElement(x) {
        res = FindElement(x);
        if (res == -1) {
                return -1;
        }
        for (i=res; i<A.length-1; i++) {
                A[i] = A[i+1];
        }
        A.pop();
        return res;
}
InitArray();
Sort();
txt = "";
for (i=0; i<A.length; i++) {
        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
}
txt += "-----------------------------\n";
output = txt;
v.onRelease = function() {
        if (tov == 1) {
                _parent.text_info = "товар уже есть в корзине. для добавления другого колличество данного товара необходимо удалить из корзины уже существующий";
        } else if (k == 0) {
                _parent.text_info = "невозможно добавить в корзину 0 едениц товара";
        } else {
                res = AddElement(inp+" , "+k, "штук в корзине");
                txt = "";
                for (i=0; i<A.length; i++) {
                        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
                }
                txt += "-----------------------------\n";
                txt2 = k+" шт. "+inp+" добавлено в корзину ";
                _parent.output = txt;
                _parent.text_info = txt2;
                tov = 1;
                kol = k;
        }
};
out.onRelease = function() {
        res = DelElement(inp+" , "+kol);
        if (res == -1) {
                output += "нельз\xff удалить несуществующий товар!\n";
        } else {
                txt = "";
                for (i=0; i<A.length; i++) {
                        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
                }
                txt += "-----------------------------\n";
                txt2 = "Элемент "+inp+" удален из корзины ";
                _parent.output = txt;
                _parent.text_info = txt2;
                tov = 0
        }
};

как видно два окна информирующих о том что происходит находятся на уровень ниже _parent.output и _parent.text_info вобщем дела такие при нажатии на кнопку v.onRelease в дублированом муве1 к примеру в _parent.output вы водится такой текст (0 : проверка 1 , 3 штук в корзине) а при нажатии на ту же кнопку только в другом дубле должна добавляться запись типа этой только уже с другим порядковым номером! а получается так что старая запись исчезает и появляется новая причём при повторном нажатии на ту же кнопку в дубле 1 появляется старая строка только к ней приписывается ещё одна ну только с другим порядковым номером как должно было быть при нажатии на кнопку в другом дубле. отсюда я сделал вывод что масивы создаются внутри дублей а текст трэйсится на уровень ниже потому просто заменяется ! как вынести масив из дубля и чтоб он был общим для всех кнопок :confused:


нифика се грузанул , надеюсь кто нить поможет

3r0jan 11.01.2006 02:50

ну что ? никто не поможет ? :(

Antares 11.01.2006 03:14

1. Массив пишется с двумя буквами "с". Давайте будем грамотны?

2. Использовать некий третий объект на этом же таймлайне, просто работать с его свойством, которое -- массив. И все. Всем все видно, все меняется по ссылке, все счастливы.

3. Учимся локализовывать код хотя бы чуть-чуть. Я понимаю, что это с опытом приходит, но нафига вываливать людям все написанное? Можно было написать одну функцию -- было бы равносильно в случае с такой проблемой.

3r0jan 11.01.2006 04:05

на том же тайм лайне это перед дублем чтоль ? или внутри него ? что то я непонял :(

Antares 11.01.2006 04:14

Ну хорошо -- где угодно, хоть в глобале. Не привязывая к объектам.

3r0jan 11.01.2006 04:20

пробовал не получается ! вобщем кароче если я выношу код из дубля ну тоесть не внутри дублируемого мува код делаю а на уровень ниже то не получается привязать действие к кнопке v внутри дублей ! причём привязать надо так чтоб в массив добавлялись значения тех переменных что в дубле находятся ! вот я и бъюсь и никак непоймую привязать получалось но тогда при нажатии на кнопку в любом дубле пользовались переменные из последнего дубля вот

Antares 11.01.2006 07:51

Бинго! Вас это не наводит на мысль?

3r0jan 11.01.2006 14:22

наводит на то что надо код к кнопке в каждом дубле привязывать из уровня ниже но что то у меня не получается =/ вот и прошу помоч

motor4ik 11.01.2006 14:32

еще раз задачу и поконкретней...и покороче

3r0jan 11.01.2006 14:42

задача создать массив вне дубля при нажатии на кнопку в дубле причём при нажатии на такую же кнопку в другом дубле в масив должны добавляться элементы а не создаваться ещё один массив код который создаёт массив и код привязываемый к кнопкам на фтором листе этого топика

вот так вроди коротко

motor4ik 11.01.2006 14:53

а что мешает просто создать массив изначально, а потом просто какая бы кнопка не была ты просто работаешь с этим массивом или что я не понял в чем трудность то?

3r0jan 11.01.2006 14:58

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

Код:

for (var n = 0; n<6; n++) {
        my_inp = this.inp.duplicateMovieClip("this.inp"+n, this.getNextHighestDepth());
        my_inp._y = my_inp._y+(n+5)*(my_inp._height+9.5);
        my_inp.inp = "проверка "+n;
        inpin = "проверка"+n
        my_inp.k = 0;
        //кнопка в корзину
       
}
my_inp.v.onRelease = function() {
        if (tov == 1) {
                text_info = "товар уже есть в корзине. для добавления другого колличество данного товара необходимо удалить из корзины уже существующий";
        } else if (my_inp.k == 0) {
                text_info = "невозможно добавить в корзину 0 едениц товара";
        } else {
                _parent.res = AddElement(my_inp.inp+" , "+my_inp.k, "штук в корзине");
                txt = "";
                for (i=0; i<A.length; i++) {
                        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
                }
                txt += "-----------------------------\n";
                txt2 = my_inp.k+" шт. "+my_inp.inp+" добавлено в корзину ";
                output = txt;
                text_info = txt2;
                tov = 1;
                kol = k;
        }
};
my_inp.out.onRelease = function() {
        _parent.res = DelElement(my_inp.inp+" , "+my_inp.kol);
        if (_parent.res == -1) {
                output += "нельз\xff удалить несуществующий товар!\n";
        } else {
                txt = "";
                for (i=0; i<A.length; i++) {
                        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
                }
                txt += "-----------------------------\n";
                txt2 = "Элемент "+my_inp.inp+" удален из корзины ";
                output = txt;
                text_info = txt2;
                tov = 0
        }
};


motor4ik 11.01.2006 15:15

да, конечно, вобщем фиша в чем , ты задаешь событие только последнему дубликату...ты фор прокрутил, и когда вышел из фора my_inp содержит последний клип ,а имено this.inp5, вот к нему то ты и обращаешься, хех, т.е. надо v.onRelease прописывать всем this.inp -ам :=)

короче проще, перенеси скобку от фора вниз да ивсего делов то :=)

3r0jan 11.01.2006 15:18

да и так пробовал таже фигня почему то только последний дубль пользует

вот погляди http://maramor.narod.ru/libero.rar

3r0jan 11.01.2006 18:33

и тишинааа =/

motor4ik 11.01.2006 18:41

unexpect file format

уж извини, на восьмеру пока не перешел...

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



Код:
for (var n = 0; n<6; n++) {
my_inp = this.inp.duplicateMovieClip("this.inp"+n, this.getNextHighestDepth());
my_inp.v.temp = n;
my_inp.v.onRelease = function() {
trace(this.temp);
};
}


полюбе должно выводиться при нажатии номер кнопки :=)

3r0jan 11.01.2006 19:35

ну трэйсит правильный номер кнопки ! а добавляет почемуто блин неправильно =/
Код:

for (var n = 0; n<6; n++) {
        my_inp = this.inp.duplicateMovieClip("this.inp"+n, this.getNextHighestDepth());
        my_inp._y = my_inp._y+(n+5)*(my_inp._height+9.5);
        my_inp.inp = name_tovara[n];
        my_inp.k = n;
        //кнопка в корзину
        my_inp.v.temp = n;

my_inp.v.onRelease = function() {
        if (tov == 1) {
                text_info = "товар уже есть в корзине. для добавления другого колличество данного товара необходимо удалить из корзины уже существующий";
        } else if (my_inp.k == 0) {
                text_info = "невозможно добавить в корзину 0 едениц товара";
        } else {
                res = AddElement(my_inp.inp+" , "+my_inp.k, "штук в корзине");
                txt = "";
                for (i=0; i<A.length; i++) {
                        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
                }
                txt += "-----------------------------\n";
                txt2 = my_inp.k+" шт. "+my_inp.inp+" добавлено в корзину ";
                output = txt;
                text_info = txt2;
                tov = 1;
                kol = k;
        }
};
my_inp.out.onRelease = function() {
        res = DelElement(my_inp.inp+" , "+my_inp.kol);
        if (res == -1) {
                output += "нельз\xff удалить несуществующий товар!\n";
        } else {
                txt = "";
                for (i=0; i<A.length; i++) {
                        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
                }
                txt += "-----------------------------\n";
                txt2 = "Элемент "+my_inp.inp+" удален из корзины ";
                output = txt;
                text_info = txt2;
                tov = 0
        }
};


}

вот что получается с этого кода код находится на уровень ниже дубля http://maramor.narod.ru/libero.html

motor4ik 11.01.2006 19:57

нууу, это уж совсем другая история :=)

3r0jan 11.01.2006 21:23

другая не другая а кнопка рапотать не хатит ((( чё делать ?

3r0jan 12.01.2006 02:46

да по ходу дела я не тока себя поставил в тупик ))) или эт просто всем вломак помоч ?

motor4ik 12.01.2006 11:57

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

есть функция такая то почему я думаю должна работать так то а она работает так то , почему? вот вопрос, а когда вот вам текст моей проги ищите баг, не так не пойдет.

3r0jan 12.01.2006 12:01

есть текст программы который работает да не так как должен . помогите разобраться в чём дело и как ето устранить =/ :(

nyctota 12.01.2006 13:10

Вложений: 1
"едИниц" пишется именно так, а не иначе ;)

Вот тебе исходник -- если и это не поможет, то я не знаю... читай, пробуй, ищи ошибки.

3r0jan 12.01.2006 14:34

во спасибо !!!! это кароче простое добавление наименований в текстовое поле ! я туда ещё скрипт воткнул чтоб в массив это дело добавлялось ! и чтоб можно было потом удалить тот или иной продукт !)))

nyctota 12.01.2006 17:03

Вообще-то у меня всё как раз в массив и добавляется, а уж потом выводится в текстовое поле, чтоб посмотреть содержимое этого массива =/

3r0jan 12.01.2006 17:26

получается что я опять не понял =/ вот вобщем гибрид
Код:

array.text = txt;
var goods_arr:Array = new Array();
var name_tovara = ['libero 3-6', 'libero 10-20'];
kolichectvo_knopok = 6;
for (var n = 0; n<kolichectvo_knopok; n++) {
        my_inp = this.attachMovie("inp", "inp"+n, this.getNextHighestDepth());
        my_inp._x = 50;
        my_inp._y = 30*n+35;
        my_inp.tmp = name_tovara[n];
        my_inp.v.temp = name_tovara[n];
        my_inp.v.onRelease = function() {
                status.text = this.temp+" добавлен в корзину";
                array.text = _root.goods_arr.toString();
                _parent.res = AddElement(this.temp);
                txt = "";
                for (i=0; i<A.length; i++) {
                        txt += i+' : '+A[i].x+'  '+A[i].caption+"\n";
                }
                txt += "-----------------------------\n";
                txt2 = this.k+" шт. "+this.temp+" добавлено в корзину ";
                array.text = txt;
                status.text = txt2;
                tov = 1;
                kol = k;
        };
       
}

тока неполучается сделать кнопку удаления элемента


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

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