PDA

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


romulko
31.12.2006, 00:08
День добрый, форумяне.
Сначала о главном – с новым всех годом! Желаю крепкого здоровья, быстродействие мозга как у четырех ядерного Intel Core Extreme, и всегда много щедрых заказчиков!!!;)

Пожелал бы больше, но, сейчас у меня очень глубокий деприсняк из-за одной проблемы с кодом. :boredom: У меня есть восем мувиков и восем кнопок, овтечающим восми мувикам. Когда кликается на первую кнопку, в переменную link заносится идентификатор копки (если копка 1, то заносится 1, если 2, то 2). У нас в переменной link занеслось 1. Когда нажимается на копке два, вызывается функция playmc();, после чего заносится в переменную link число два, так как была нажата вторая кнопка. Функция проигрует мувик один с середины (то есть, он прячется), и вместо него выезжает мувик два (код на копке deg.mc1.gotoAndPlay("sp1");). Вот код –

link = null;
function playmc() {
deg["mc"+link].gotoAndPlay("s2");
}

На кнопках код –

on (press) {
if (link<>1) {
playmc();
deg.mc1.gotoAndPlay("sp1");
link = 1;
}
}


Код работает, переменные заносятся (отслеживал через trace), но вот при нажатии на вторую кнопку, первый мувик не воспроизводится.
Интересует, правильно ли я написал строку

deg["mc"+link].gotoAndPlay("s2");

так как думаю, именно она не работает. При составлении переменных в строку, она должна иметь вид (если в переменной link стоит 1)

deg.mc1.gotoAndPlay("s2");

Пожалуйста, помогите мне разобраться с этим, так как именно на этой проблеме зациклился уже два дня!!! :wacko:
Перерыл весь свой бук по АС, ничего не нашел.
Еще раз всех с праздником!

silin
31.12.2006, 00:39
romulko, с наступающим тебя, всех благ..!!
не мог бы ты сгенерить пример проблемы попроще..
а то помочь хочется, а понять не хватает ресурсов..

CCCPirate
31.12.2006, 00:45
Ага, я тож прочитал - сломал мозг

romulko
31.12.2006, 02:16
СССПират и Силин, спасибо что откликнулись.
Думаю, надо было вначале объяснить, что нужно сделать, чем чтобы вы поняли, как я хотел это сделал (у меня мозг еще хорошо не работает с АS, тому, то, как я програмлю понять очень сложно - все настолько запутано, что ой ой ой :rolleyes: .

Вот, сейчас на меня упало прозрение, и я сделал все, что надо, но опять же, “по-своему”.


Но, все же на будущее хотелось бы узнать, почему мой код не работал. Для этого, пожалуйста, объясните, какой вид будет иметь код, после того, как флеш в него вставит переменную (то есть, скомпилирует для активации).
Вот код –

link = null;
deg["mc"+link].gotoAndPlay("s2");


Заносим в переменную link, допустим, число 5. И вот, здесь собака зарыта (то есть, это истинна моего непонимания) – какой вид будет в этой строки –

deg.mc5.gotoAndPlay("s2");

else

degmc5.gotoAndPlay("s2");

else ченить другое?
Готовый рабочий swf в аттаче.

silin
31.12.2006, 11:07
да просто все, на самом деле:
link = null;
trace("mc"+link);//mcnull
deg["mc"+link].gotoAndPlay("s2");//≡deg.mcnull.gotoAndPlay("s2");
link = 5;
trace("mc"+link);//mc5
deg["mc"+link].gotoAndPlay("s2");//≡deg.mc5.gotoAndPlay("s2");

romulko
31.12.2006, 12:53
Silin, спасибки!

romulko
31.12.2006, 15:24
НеТ, все таки интересно, почему же не работает фукция?
Вот, рабочий код -

link = null;
function playmc() {
if (link == 1) {
deg.mc1.gotoAndPlay("sp2");
} else if (link == 2) {
deg.mc2.gotoAndPlay("sp2");
} else if (link == 3) {
deg.mc3.gotoAndPlay("sp2");
} else if (link == 4) {
deg.mc4.gotoAndPlay("sp2");
} else if (link == 5) {
deg.mc5.gotoAndPlay("sp2");
} else if (link == 6) {
deg.mc6.gotoAndPlay("sp2");
} else if (link == 7) {
deg.mc7.gotoAndPlay("sp2");
} else if (link == 8) {
deg.mc8.gotoAndPlay("sp2");
}
}

Я хотел сделать так

link = null;
function playmc() {
deg["mc"+link].gotoAndPlay("s2");
}

Почему эе этот код не работает?

silin
31.12.2006, 15:41
предположение: не работает, потому нет в них метки "s2", а есть "sp2" ..
посерьезнее надо, заметь как встретишь НГ, так и проведешь: а оно тебе надо весь год из-за описок страдать..:)

pkfun
31.12.2006, 15:47
link = null;
function playmc() {
if (link == 1) {
deg.mc1.gotoAndPlay("sp2");
} else if (link == 2) {
deg.mc2.gotoAndPlay("sp2");
} else if (link == 3) {
deg.mc3.gotoAndPlay("sp2");
} else if (link == 4) {
deg.mc4.gotoAndPlay("sp2");
} else if (link == 5) {
deg.mc5.gotoAndPlay("sp2");
} else if (link == 6) {
deg.mc6.gotoAndPlay("sp2");
} else if (link == 7) {
deg.mc7.gotoAndPlay("sp2");
} else if (link == 8) {
deg.mc8.gotoAndPlay("sp2");
}
}

Для таких конструкций используйте оператор switch.

romulko
31.12.2006, 15:53
Ой, РАБОТАЕТ!!!! :eek:
:yahoo:



pkfun и silin, СПАСИБО!!! С этого момента буду два раза проверять код на валидность меток, пременны и всего прочего!!!!

Еше раз с НГ!!!! :bye:

pkfun
31.12.2006, 16:40
Вы знаете, я думаю что можно сделать попроще ваш код. В этой функции, которая запускает определенный мувик в зависимости от значения переменной, нет необходимости. По вашему коду видно, что значение переменной совпадает с порядковым номером мувика. Есть возможность непосредственно обращаться к мувику по значению переменной link. Для этого вам нужно при размещении мувиков на сцене занести ссылки на них в массив и затем вы сможете легко оперировать уже ссылками на мувики в зависимости от значения переменной link.
Вот небольшой пример:

Stage.scaleMode = 'noScale';
//
var link:Number = 0;
var mc:MovieClip = null;
var mc_links:Array = new Array();
//
//размещаем мувики на сцене
for (i=0; i<6; i++) {
mc = this.attachMovie('mc'+i, 'mc'+i, this.getNextHighestDepth());
mc._x = i*100-50;
mc._y = Stage.height/2-mc._height/2;
mc.gotoAndStop(mc._totalframes);
//
mc_links[i] = mc;
}
//
trace(i)//выполяняется по окончании цикла
link = 2;
mc_links[link].gotoAndStop(10);

40st
31.12.2006, 16:51
Интересно))) Этот вариант по круче будет.

romulko
31.12.2006, 21:19
pkfun, пасибка.
Сейчас буду проповать это интегрировать в свой мув.
ДУмаю, на следующей недели опубликую этот сайт для общей критики.

miramax
31.12.2006, 21:29
Сейчас буду проповать это интегрировать в свой мув.

Новый год грядёт, работа не дремлет ? :)

romulko
31.12.2006, 22:15
Новый год грядёт, работа не дремлет ?

Мирамакс - еще нет двенадцати! :p

Потому, сижу, ваяю. Сейчас очень много идей позалазили в череп!!! Зря не воплотить несколько в реальность - остальные запишу на листике и улечу на крыльях счастья праздновать новый год, так как я очень много от него ожидаю - именно в 2007 будет начинаться мой взрослый путь к успеху в сфере веб-десигна!!!!

ВСЕМ ВСЕМ ВСЕМ, УДАЧИ, ЛЮБВИ и ТЕРПЕНИЯ, ЗДОРОВЯ, УСПЕХА В ДЕЛАХ, И ЧТОБЫ ВСЕ У ВАС БЫЛО В ПОРЯДКЕ :yahoo: :p :bye:

АМИНЬ!