Xpoint
   [напомнить пароль]

почему не присваиваются значения переменных?

Метки: [без меток]
2007-06-20 14:19:53 [обр] Вячеслав Крюков[досье]
сообщение промодерировано
Пишу свою галерею на flash.
есть 5 movieclip-ов (m1,m2,m3,m4,m5), в которые подгружаются первые 5 картинок из папки с картинками, есть кнопочки опять же Movieclip-ные(s1,s2,s3,s4,s5). При нажатии на эти кнопки (s1 и др.)подгружаются следующие 5 картинок. (в зависимости от того сколько картинок).
В данном коде есть ошибка, первые 5 картинок подгружаются нормально, а вот если я кликаю на любую кнопку, которая должна по логике подставить новое значение в переменные n и m и показать мне следующие 5 картинок, подгрузка картинок не происходит. Так как до n и m значения почему-то не доходят.
Если нужно выложу в инет исходник.
var i = 0;
for (i=1;i<=10;i++) {
this["s"+i]._visible=false;
}

var img_array = ["alum.jpg", "alum2.jpg", "alum3.jpg", "alum4.jpg", "alum.jpg", "alum4.jpg","alum3.jpg", "alum2.jpg", "alum.jpg","alum.jpg", "alum2.jpg", "alum3.jpg"];
var count = 0;

if (img_array.length <=5) {
for (i=1;i<=5;i++) {
loadMovie("product/alum/"+img_array[count++],this["m"+i]);
}

}
if (img_array.length > 5) {
if (!n && !m) {var n=1, m=5;}
s1.onPress = function () {n=1;m=5;}
s2.onPress = function () {n=m+n;m=2*m;}
s3.onPress = function () {n=2*m+n;m=3*m;}
s4.onPress = function () {n=3*m+n;m=4*m;}
s5.onPress = function () {n=4*m+n;m=5*m;}
s6.onPress = function () {n=5*m+n;m=6*m;}
s7.onPress = function () {n=7*m+n;m=8*m;}
s8.onPress = function () {n=8*m+n;m=9*m;}
s9.onPress = function () {n=9*m+n;m=10*m;}
s10.onPress = function () {n=10*m+n;m=11*m;}

trace(n);
trace(m);
var total = img_array.length;
if (total > m) {nop=total/m;nop2=int(nop);if (nop > nop2) {razn=total-(nop2*m);str=nop2+1;}}
if (not razn) {str=nop2};
for (k=1;k<=str;k++) {
this["s"+k]._visible=true;
}

for (i=n;i<=m;i++) {
loadMovie("product/alum/"+img_array[count++],this["m"+i]);
}
count=0;
}
спустя 12 минут [обр] Алексей В. Иванов(276/2861)[досье]

А где логика по запуску загрузки по нажатию кнопок?
У вас же просто присвоение n,m идёт. Вместе с этим нужно запустить цикл с "loadMovie".
Ещё есть подозрение, что вы запутались в областях видимости. Помните, что переменные не глобальны! Они живут внутри отдельных мувиклипов. Когда вы пишите:

if (!n && !m) {var n=1, m=5;}
s1.onPress = function () {n=1;m=5;}

в первой строке происходит обращение к n,m в данном клипе, а во второй строке обращение идёт к переменным внутри s1. Т.е.: n != s1.n, m != s1.m
Правильно писать _parent.n для таких случаев или пользоваться конструкцией "with".

спустя 1 минуту [обр] Вячеслав Крюков[досье]
Так сейчас попробую внести изменения.
спустя 12 минут [обр] Вячеслав Крюков[досье]

Попробовал, что-то опять не выходит.

"в первой строке происходит обращение к n,m в данном клипе"

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

s1.onPress = function () {n=1;m=5;} и кстати неужели присваивая movie-ку событие onPress я и переменные передаю не в Layer, где основой код, а в movie-к s1.

Может весь код переместить в movie-к и задать событие onEnterFrame, чтоб постоянно отслеживались изменения?
А то у меня подозрение, что код исполнился и всё на этом. И как новые значения, задаются после нажатия кнопки он их уже не воспринимает.

спустя 15 минут [обр] Алексей В. Иванов(276/2861)[досье]
А с чего вы решили, что actionscript идет в клипе. Я код вообще вынес в отдельный Layer. Из него идет управление галереей и в него же должны поступать новые значения переменных.

Все слои находятся внутри клипа. Если клипа не видно, это не значит, что его нет. _root — это самый обчычный MovieClip, который, как ни странно имеет все свойства обычного клипа, в том числе и _x/_y/_width/..., которые нельзя задать искажением в редакторе.

s1.onPress = function () {n=1;m=5;} и кстати неужели присваивая movie-ку событие onPress я и переменные передаю не в Layer, где основой код, а в movie-к s1.

Верно. Обработчик вызывается в контексте того клипа, куда он прикреплён.

Может весь код переместить в movie-к и задать событие onEnterFrame, чтоб постоянно отслеживались изменения?

Это не лучшее решение, но пока вы учитесь вы можете свободно эксперементировать. Самый большой друг и помошник в овладении флэшем — это функция trace.
Также пользуйтесь отладкой и установкой brakepoint'ов.

А то у меня подозрение, что код исполнился и всё на этом. И как новые значения, задаются после нажатия кнопки он их уже не воспринимает.

Верно

Powered by POEM™ Engine Copyright © 2002-2005