Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.10.2013, 08:11
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 1  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
Question замена attachMovie на as 3.0

Код AS1/AS2:
for (p=1; p<=7; p++){
		attachMovie('page'+p,"pg"+p, 0);}
нужно вот такую конструкцию реализовать на as 3.0

Пол ночи читала - наваяла вот это

Код AS3:
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]);}
Но оно не работает 1086: Синтаксическая ошибка: ожидается точка с запятой перед leftbracket.

подскажите, как правильнее добавлять в зависимости от необходимости экземпляры разных объектов, пожалуйста


Последний раз редактировалось Маруська; 31.10.2013 в 10:39.
Старый 31.10.2013, 09:00
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 2  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
Лишняя открывающая скобка "{" тут:
Код AS3:
for (p=1; p<=7; p++){
	{var pg[p] = new page_1();

Старый 31.10.2013, 10:36
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 3  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
Цитата:
Сообщение от Vasyaga Посмотреть сообщение
Лишняя открывающая скобка "{" тут:
Код AS3:
for (p=1; p<=7; p++){
	{var pg[p] = new page_1();
я случайно вставила, когда тестила - в скрипте этой скобки не было. всё равно не работает.

Нужно какое-то глобальное решение

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

Код AS3:
for (p=1; p<=7; p++){
	arr[p]=0;
	if (p==page){
		var pg[p] = new page_1();
                addChild(pg[p]);
		Stage.pg[p]._y=264.5;
		Stage.pg[p]._x=-150;
		arr[p]=1;
		}
	}

Старый 31.10.2013, 11:14
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 4  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Код AS3:
var p:Number;
var page:Number;
var pg = new Array();
for (p=1; p<=7; p++){
	var obj = new page_1();
         addChild(obj);
         pg.push(obj);
}

Старый 31.10.2013, 11:30
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 5  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
спасибо

Добавлено через 1 час 16 минут
Код AS3:
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;
		}
	}
итак. кое-что работает. по крайней мере мувик на сцену добавляется, но абсолютно игнорирует _x и _y

И кто бы рассказал, как правильно обратиться к другому мувику на сцене Stage.bt1.gotoAndStop(2);, как это делалось в AS 2.0

И ещё вопрос: как сделать динамической эту часть кода?
Код AS3:
var obj = new page_1();
чтобы работало как-то вроде
Код AS3:
var obj = new ['page_'+p]();


Последний раз редактировалось Маруська; 31.10.2013 в 12:48.
Старый 31.10.2013, 14:03
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 6  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код AS3:
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;
}
}
Такое ощущение, что вы не знаете, что вы делаете.

Код AS3:
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. если же вы поменяете отсчет р от нуля, прийдется поправить это.
}
}

Старый 31.10.2013, 16:43
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 7  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
Я вообще на AS 3.0 не очень часто работаю. Обычно делаю баннеры или приложения сетевые строго под Flash Player 9.0 и AS 2.0- требования многих платформ. А тут приспичило на тройке написать - и мучаюсь теперь.
Написала весь скрипт, а теперь переделывать приходится - поэтому такая каша.


Код AS3:
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-й элемент
}
}
Добавлено через 1 час 20 минут
как вообще описать Movie clip и как к нему обращаться.
Вот есть на сцене мувик с именем. Надо ли в библиотеке делать экспорт и создавать класс? и как потом обращаться к этому элементу?


Последний раз редактировалось Маруська; 31.10.2013 в 18:05.
Старый 31.10.2013, 20:46
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 8  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Вот есть на сцене мувик с именем.
Если он на сцене, то не обязательно экспортировать в AS. Если он уже существует в кадре, то у него есть такой параметр как "instant name". Если у вас руссифицированная версия флеша, то там есть окно "Свойства", если нет, то "Properties". В русской версии у меня при выделении любого клипа есть на этой панели поле,где написано "<Назначить имя екземпляру>".
В него вписываете любое имя, латиницей соответственно. А потом создаете новый слой, на котором пишете код.(это более удобно, когда весь код на отдельном слое) И в нем обращаетесь к имени, которое задали в поле. Но, насколько я вас понял, вы хотите создать 10 экземпляров, и иметь к ним доступ в AS?

Код AS3:
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
{
   //здесь делаем что-то, это выполнится при клике именно по второму элементу.
}
Добавлено через 20 минут
Ну, и, чтобы пройтись по всем элементам, используем вот такую конструкцию:

Код AS3:
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();
Старый 31.10.2013, 21:28
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 9  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
спасибо большое за такой точный ответ=) Я на as 2.0 уже 6 лет пишу=)

Но дело немного по-другому обстоит.

у меня есть 7 "кнопок" (movieclip) на сцене, по клику на которые должны подгружаться 1 из 7-ми мувиков из библиотеки соответственно. все кнопки в свойствах имеют свои имена bt1...bt7

вот адекватно и корректно работающий скрипт на AS 2.0
Код AS1/AS2:
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);}
}
Добавлено через 14 минут
вот соответствующие куски кода на as 2.0 и as 3.0(насколько смогла сделать)
Код AS1/AS2:
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;//'кнопка нажата'
		}
	}
Код AS3:
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.
Старый 31.10.2013, 21:47
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 10  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
var arr:Array= new Array(7);
Зачем эта семерка в конструктор? Таким образом, вы присваете arr[0] значение 7.
Хотя нет, даже этого не происходит.

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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