![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 205
|
нужно вот такую конструкцию реализовать на as 3.0
Пол ночи читала - наваяла вот это var p:Number; var page:Number; var pg = new Array for (p=1; p<=7; p++){ var pg[p] = new page_1(); addChild(pg[p]);} подскажите, как правильнее добавлять в зависимости от необходимости экземпляры разных объектов, пожалуйста Последний раз редактировалось Маруська; 31.10.2013 в 10:39. |
|
|||||
|
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 205
|
Цитата:
Нужно какое-то глобальное решение Добавлено через 8 минут вообще, по моему масштабному плану должен такой скрипт выполняться |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 217
|
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 205
|
спасибо
Добавлено через 1 час 16 минут page=1; var arr:Array= new Array(7) var p:Number; var page:Number; var pg = new Array for (p=1; p<=7; p++){ arr[p]=0; if (p==page){ var obj = new page_1(); addChild(obj); pg[p].push(obj); pg[p].y=264.5; pg[p].x=-150; //Stage.bt1.gotoAndStop(2); arr[p]=1; } } И кто бы рассказал, как правильно обратиться к другому мувику на сцене Stage.bt1.gotoAndStop(2);, как это делалось в AS 2.0 И ещё вопрос: как сделать динамической эту часть кода? чтобы работало как-то вроде Последний раз редактировалось Маруська; 31.10.2013 в 12:48. |
|
|||||
page=1; var arr:Array= new Array(7) var p:Number; var page:Number; var pg = new Array for (p=1; p<=7; p++){ arr[p]=0; if (p==page){ var obj = new page_1(); addChild(obj); pg[p].push(obj); pg[p].y=264.5; pg[p].x=-150; //Stage.bt1.gotoAndStop(2); arr[p]=1; } } page=1; // вы присваиваете page, которая обьявлена позже, значение 1? не должно в строгом режиме компилиться. var arr:Array= new Array(7); // после каждой строки должна быть точка с запятой ; var p:Number; var page:Number; var pg = new Array(); //так, конечно, тоже будет работать, но стандарты говорят при создании экземпляра ставить две скобки и еще вы забыли точку с запятой. for (p=1; p<=7; p++){ //советую использовать отсчет от нуля, так как вы потом обращаетесь к массиву под этим индексом. arr[p]=0; // я не очень понимаю, как у вас это вообще компилится. я бы советовал использовать arr.push(0), добавляя это в конец массива. if (p==page){ var obj = new page_1(); addChild(obj); pg.push(obj); //Вы обращаетесь к каждой ячейке как к массиву и в этот массив добавляете новый элемент. Не должно работать. убираем [p], так мы обратимся к самому массиву и добавим в его конец этот элемент. pg[p].y=264.5; pg[p].x=-150; //Stage.bt1.gotoAndStop(2); arr[p]=1; //а вот здесь уже запись правильна, пока у вас р==arr.length-1. если же вы поменяете отсчет р от нуля, прийдется поправить это. } } |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 205
|
Я вообще на AS 3.0 не очень часто работаю. Обычно делаю баннеры или приложения сетевые строго под Flash Player 9.0 и AS 2.0- требования многих платформ. А тут приспичило на тройке написать - и мучаюсь теперь.
Написала весь скрипт, а теперь переделывать приходится - поэтому такая каша. var arr:Array= new Array(7); // после каждой строки должна быть точка с запятой - спасибо. но привыкла, что flash не критичен в плане программных скобок var p:Number; var page:Number;//с передачей этой переменной вообще у меня крупные проблемы - она должна присваиваться впервые в символе предыдущего кадра. Но в предыдущем кадре никак не могу присвоить ей значение Stage.page=1 - TypeError: Error #1010: A term is undefined and has no properties. var pg = new Array(); for (p=1; p<=7; p++){ arr[p]=0; //здесь присваиваем p-тому элементу массива 0, в дальнейшем эти элементы будут индикатором (0/1) нажатия "кнопки" if (p==page){ var obj = new page_1();//здесь мне нужно реализовать подгрузку не только page_1, но и других элементов. ['page_'+p] или как-то так, но не знаю, как это оформляется на AS 3.0 addChild(obj); pg.push(obj); //Убираем [p], так мы обратимся к самому массиву и добавим в его конец этот элемент - здесь мне элемент массива нужно добавлять не в конец, а в конкретное p-тое место этого массива pg[p].y=264.5;//смена координат не работает pg[p].x=-150; Stage.bt1.gotoAndStop(2);//Здесь мне необходимо обратиться к мувиклипу bt1, но как это сделать - тоже не знаю arr[p]=1; //Tсли же вы поменяете отсчет р от нуля, придется поправить это - не критично, можно просто игнорировать 0-й элемент } } как вообще описать Movie clip и как к нему обращаться. Вот есть на сцене мувик с именем. Надо ли в библиотеке делать экспорт и создавать класс? и как потом обращаться к этому элементу? Последний раз редактировалось Маруська; 31.10.2013 в 18:05. |
|
|||||
|
Цитата:
В него вписываете любое имя, латиницей соответственно. А потом создаете новый слой, на котором пишете код.(это более удобно, когда весь код на отдельном слое) И в нем обращаетесь к имени, которое задали в поле. Но, насколько я вас понял, вы хотите создать 10 экземпляров, и иметь к ним доступ в AS? var elements:Array = new Array(); for(var i:int = 0; i< 10; i++) { var element:SomeMC = new SomeMC(); elements.push(element); addChild(elements[i]); elements[i].x = someValue; elements[i].y = someValue; } //теперь пример //обращаемся к любому из созданных элементов. elements[0].alpha = 0.5; //меняет прозрачность первого элемента наполовину. elements[1].addEventListener(MouseEvent.CLICK, onClickSecondElement); //Слушаем клик по второму элементу function onClickSecondElement(e:MouseEvent):void { //здесь делаем что-то, это выполнится при клике именно по второму элементу. } Ну, и, чтобы пройтись по всем элементам, используем вот такую конструкцию: for(var i:int = 0; i < elements.length; i++) { //меняем прозрачность каждого элемента наполовину elements[i].alpha -= .5; //слушаем клик по каждому из элементов elements[i].addEventListener(MouseEvent.CLICK, onClickElement); } function onClickElement(e:MouseEvent):void { //чтобы обратиться к элементу, который передает событие, //используем e.target. приводим его к MovieClip. removeChild(e.target as MovieClip); // удаляем его со сцены. } Последний раз редактировалось ZackMercury; 31.10.2013 в 20:58. Причина: addChild(); |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 205
|
спасибо большое за такой точный ответ=) Я на as 2.0 уже 6 лет пишу=)
Но дело немного по-другому обстоит. у меня есть 7 "кнопок" (movieclip) на сцене, по клику на которые должны подгружаться 1 из 7-ми мувиков из библиотеки соответственно. все кнопки в свойствах имеют свои имена bt1...bt7 вот адекватно и корректно работающий скрипт на AS 2.0 var arr:Array= new Array(7) var p:Number; for (p=1; p<=7; p++){//первый вход в кадр, переменная page передаётся из предыдущего кадра (равна 1) arr[p]=0;//здесь присваиваем p-тому элементу массива 0, в дальнейшем эти элементы будут индикатором (0/1) нажатия "кнопки" if (p==page){ attachMovie('page'+p,"pg"+p, 0);//загружаем соответствующий page мувик из библиотеки _root['pg'+p]._y=264.5;//выравниваем координаты _root['pg'+p]._x=-150; _root['bt1'+p]gotoAndStop(2);//переходим на 2-й кадр в кнопке - "нажата" arr[p]=1;//'кнопка нажата' } } for(p=1; p<=7; p++) { var item:MovieClip = this['bt'+p];//проверяем, какая из 7-ми кнопок нажата item.p = p; //"запоминаем" номер item.onRelease = itemOnRelese; //назначаем обработчик item.onRollOut = itemOnRollOut; item.onRollOver = itemOnRollOver; } function itemOnRelese() { var p:Number = this.p; //извлекаем номер for (b=1; b<=7; b++) {if (arr[b]==1){arr[b]=0;_root['bt'+b].gotoAndStop(1)}//если какая-то кнопка нажата - деаем её "отжатой" if (b==p){ attachMovie('page'+p,"pg"+p, 0);//подгружаем соответствующий нажатой кнопке мувик _root['pg'+p]._y=264.5;//выравниваем по координатам _root['pg'+p]._x=-150; arr[p]=1;//запоминаем, что кнопка нажата} } } function itemOnRollOver() { this.gotoAndStop(2); } function itemOnRollOut() {var p:Number = this.p; if (arr[p]!=1){this.gotoAndStop(1);} } вот соответствующие куски кода на as 2.0 и as 3.0(насколько смогла сделать) var arr:Array= new Array(7) var p:Number; for (p=1; p<=7; p++){//первый вход в кадр, переменная page передаётся из предыдущего кадра (равна 1) arr[p]=0;//здесь присваиваем p-тому элементу массива 0, в дальнейшем эти элементы будут индикатором (0/1) нажатия "кнопки" if (p==page){ attachMovie('page'+p,"pg"+p, 0);//загружаем соответствующий page мувик из библиотеки _root['pg'+p]._y=264.5;//выравниваем координаты _root['pg'+p]._x=-150; _root['bt1'+p]gotoAndStop(2);//переходим на 2-й кадр в кнопке - "нажата" arr[p]=1;//'кнопка нажата' } } var arr:Array= new Array(7); var p:Number; var pg = new Array(); for (p=1; p<=7; p++){ //первый вход в кадр, переменная page передаётся из предыдущего кадра (равна 1) arr[p]=0; //здесь присваиваем p-тому элементу массива 0, в дальнейшем эти элементы будут индикатором (0/1) нажатия "кнопки" if (p==page){ var obj = new page_1();//загружаем соответствующий page мувик из библиотеки, но надо не только page_1, но и page_2, page_3 и т.д. addChild(obj); pg.push(obj); pg[p].y=264.5;//смена координат не работает pg[p].x=-150; Stage.bt1.gotoAndStop(2);//переходим на 2-й кадр в кнопке - "нажата", вот только как к ней правильно обратиться - не знаю arr[p]=1; //'кнопка нажата' } } Последний раз редактировалось Маруська; 31.10.2013 в 22:03. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|