PDA

Просмотр полной версии : переменная как параметр функции


maiik
17.11.2005, 21:22
Добрый день..
помогите пожауйста в следующем:

у меня написана функция

function mike (param1) {.....}

так вот, если param1 вписывать прямо ручками типа mike (5) то все работает.. а мне нужно туда вставить переменную.. с этим засада. вот такой код:

for (i=0; i<num1; i++) {
param1 = "this.kn" add i;
trace (param1); //выдает this.kn0 , то что мне надо (без кавычек, все правильно).
mike(param1); .. не работает...

а если вставлять в параметр тот самый результат трейса, все ок.
mike(this.kn0);

МОЖНО ЛИ ВСТАВЛЯТЬ ПЕРЕМЕННЫЕ КАК ПАРАМЕТР ФУНКЦИИ? и как?

iNils
17.11.2005, 21:25
for (i=0; i<num1; i++) {
mike(this["kn"+i]);
}

maiik
17.11.2005, 21:36
Спасибо огромное!! все получилось!

iNils
17.11.2005, 21:43
Проблема твоя была в том, что ты передовал строку, а не ссылку на переменную. И трейс должен был показывать значение переменной, а не путь до нее с именем.

maiik
18.11.2005, 16:13
хорошо... дальше у меня встает другая проблема
(вобще я пытаюсь со своими повехностными знаниями в AS написать 2-мерное меню с редактируемыми звне пунктами (в текстовике)( :cool: )

есть глобальная функция (взял на форуме)


_global.dClip = function(movclip, numclips, shifty) {
var clipname = movclip._name;
trace (clipname);
trace(_root[clipname]._y);
var newname = "";
for (i=1; i<=numclips; i++) {
newname = clipname+i;
trace (newname);
duplicateMovieClip(clipname, newname, this.getNextHighestDepth());
_root[newname]._y += shifty;
trace(_root[newname]._y);
shifty += 10;
}
}

потом вызываю функцию кнопкой

on (release) {
dClip(this.kn0, 3, 20);

}


трейс выдает вроде правильные значения
kn0
164.85
kn01
184.85
kn02
194.85
kn03
204.85

но новый mc создается только один (вместо 3х).. я проверял, создается только kn03... почему?.. :eek:

St. Father
18.11.2005, 16:31
_global.dClip = function (movclip, numclips, shifty)
{
for (i = 1; i <= numclips; i++)
{
duplicateMovieClip (movclip, movclip._name+i, getNextHighestDepth ());
_root[movclip._name+i]._y += shifty*i;
}
};

мож так?

maiik
18.11.2005, 17:54
да, получилось! спасибо оромное.. я дилетант, н решение с shifty*i мне показалось элегантным :-)

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

maiik
18.11.2005, 20:58
такк-с.. теперь такая у меня морока..

исходная кнопка меню педсавляет собой мувик в котором 3 слоя (подложка, отекстовый блок (txtnaknopke), и кнопка с событием
on (release) {getURL(urla);})

дублирование кнопок меню вызывается событием:


on (release) {

for (i=1; i<3; i++) {
this["kn"+i].txtnaknopke.text = l_a(0,i);//l_a - это функция возвращает имя для кнопки из 2мерного массива или ссылку (если есть 3й параметр. она работает, все возвращает правильно...)
this["kn"+i].but.urla = l_a(0,i,0); // вот тут как раз присваивается переменной ссылка.
trace (this["kn"+i].but.urla); //возвращает все ништяк
h01.html
h02.html
h03.html
h04.html как забито в массиве.
}

}
а раньше, на предыдущей стадии, у меня на кнопке переменная была дана как this.parent.urla (то есть кнопа сама брала значение переменной с верхнего уровня и все работало), а теперь то у меня не одна кнопка, поэтому надо именно каждой копии исх. кнопы насаждать разное значение urla.. то есть сверху. и так не работает. undefined мать его... :mad:

St. Father
21.11.2005, 08:51
1. я бы не стал использовать кнопку в клипе только для ссылки (если надо - то надо, но я надобности не вижу)
2. ниченипонял что не работает? где ундеф? как ты его пытаешься взять?

maiik
21.11.2005, 20:10
ну у меня создаются мувиклипы в которых кнопки (this.kn1.but и таких несколько) потом им передается каждой разный урл (переменная urla) но в том то и дело что не передается.. когда я прописывал в этой кнопке ссылку на верхний уровень

on (release) {
getURL(this._parent.urla);
}

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

KPaul
21.11.2005, 20:59
Можно при дублировании задавать св-во, которое будет хранить ссылку:
var someUrl = "http://...";
...duplicateMovieClip(..., ..., {$url:someUrl});
Но для кнопок, они не имеют своей временной шкалы, из обработчика
на кнопке не удастся сослаться на this.$url. Поэтому обработчики лучше всегда определять как метод:
myBut.onRelease = function(){
trace(this.$url);
}
Если ты пользуешься AS1.0, то ошибок быть не должно.