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

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

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

Регистрация: Mar 2007
Сообщений: 31
Отправить сообщение для Warrgoth с помощью ICQ
Question обращение к мувику, созданному в цикле

Допустим, нарисовал я мувик кнопки и поместил в библиотеку.
Потом делаю функцию, которая аттачит в цикле этот мувик и получаю столбик с пятью кнопками.
Параллельно в цикле пишу trace(mc._name);
Получаю ряд названий. Все нормально.

После исполнения цикла хочу обратится допустим к четвертой кнопке .. и получаю undefined.

Как решить эту проблему?
Возможно ли обратится к клипу и как это лучше сделать?
__________________
OMG... we have absolutely no life! (c)

Старый 14.10.2007, 20:48
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 2  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Так как клип аттачится на сцену то ес-но можнополучить доступ к нему, зависит всё от того как вы аттачите и как обращаетесь.
__________________
Free-lance | Twitter | Me

Старый 14.10.2007, 21:16
Ostgur вне форума Посмотреть профиль Отправить личное сообщение для Ostgur Посетить домашнюю страницу Ostgur Найти все сообщения от Ostgur
  № 3  
Ответить с цитированием
Ostgur
 
Аватар для Ostgur

Регистрация: Apr 2004
Адрес: macromedia—adobe Любит: Flash MX
Сообщений: 2,860
обращаться через переменную, которая должна быть равна аттачиваему элементу

Старый 15.10.2007, 10:11
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 4  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Создавать в том же цикле массив ссылок на клипы, или использовать имена для клипов типа "buttonN"+i
__________________
"We Are The Champions My Friends!" Queen

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

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
Вот код:
Код:
import mx.transitions.Tween;
import mx.transitions.easing.*;
var count:Number = 3;
for (var i:Number=0; i<count; i++){
var temp1:MovieClip=this.createEmptyMovieClip("ablock"+i,i);
temp1.lineStyle(2,0xFFFFFF,100);
temp1.moveTo(20,20);
temp1.lineTo(60,20);
temp1.lineTo(60,60);
temp1.lineTo(20,60);
temp1.lineTo(20,20);
temp1._x=+80*i;

var temp2:MovieClip = temp1.createEmptyMovieClip("bblock"+i,i);
temp2.beginFill(0xFF0000,100);
temp2.moveTo(22,22);
temp2.lineTo(58,22);
temp2.lineTo(58,58);
temp2.lineTo(22,58);
temp2.lineTo(22,22);
temp2.endFill();
temp2._alpha=0;

temp2.onRollOver=function(){
var light:Tween= new Tween(temp2, "_alpha", Regular.easeIn, 0,50, 10, false);
}
}
Вот вопрос:
Не могу собразить, как синтаксически правильно обратиться к имени динамически созданного MovieClip.

Здесь:
Код:
var light:Tween= new Tween(temp2, "_alpha", Regular.easeIn, 0,50, 10, false);
как я понимаю, я обращаюсь к временной переменной созданного мувиклипа, которая по окончании цикла примет значение "3", поэтому при наведении на любой из квадратов, заливка стартует в последнем. А как обратится к имени "мувика" в конкретной итерации цикла?

Заранее, благодарю за дельные подсказки.

Старый 23.08.2008, 13:46
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 6  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Код:
var mcArray:Array = new Array();
var count:Number = 3;

for (var i:Number=0; i<count; i++){
   var temp1:MovieClip=this.createEmptyMovieClip("ablock"+i,i);
   temp1._x=+80*i;
   mcArray.push(temp1);
}
в mcArray будут ссылки на созданные динамически объекты.

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

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
Obi, спасибо за ответ! Но не могли бы Вы расстолковать мне вот еще что:

Следуя Вашему методу, создаю массив:
Код:
var act:Array = new Array();
var count:Number = 3;
Далее идет цикл:
Код:
for (var i:Number=0; i<count; i++){
var temp1:MovieClip=this.createEmptyMovieClip("ablock"+i,i);
temp1.lineStyle(2,0xFFFFFF,100);
temp1.moveTo(20,20);
temp1.lineTo(60,20);
temp1.lineTo(60,60);
temp1.lineTo(20,60);
temp1.lineTo(20,20);
temp1._x=+80*i;

var temp2:MovieClip = temp1.createEmptyMovieClip("bblock"+i,i);
temp2.beginFill(0xFF0000,100);
temp2.moveTo(22,22);
temp2.lineTo(58,22);
temp2.lineTo(58,58);
temp2.lineTo(22,58);
temp2.lineTo(22,22);
temp2.endFill();
temp2._alpha=0;
act.push(temp2);

//Методом push вставляем элементы в массив (в моем случае ссылки на Movie 
//Clips), теперь act cодержит пути к мувиклипам: 
//_level0.ablock0.bblock0,_level0.ablock1.bblock1,_level0.ablock2.bblock2
 
//Теперь, если вручную прописать:
_level0.ablock0.bblock0.onRollOver=function(){
var light:Tween= new Tween(_level0.ablock0.bblock0, "_alpha", Regular.easeIn, 0,50, 10, false);}
_level0.ablock1.bblock1.onRollOver=function(){
var light:Tween= new Tween(_level0.ablock1.bblock1, "_alpha", Regular.easeIn, 0,50, 10, false);}
_level0.ablock2.bblock2.onRollOver=function(){
var light:Tween= new Tween(_level0.ablock2.bblock2, "_alpha", Regular.easeIn, 0,50, 10, false);}
}
то работает как надо: при наведении на первый квадрат - заливка стартует в первом, при наведении на второй - во втором и т.д.
А как же всетаки циклично это сделать? Как извлечь путь из массива

и вставить сюда:
Код:
ПУТЬ ИЗ МАССИВА.onRollOver=function(){
var light:Tween= new Tween(ПУТЬ ИЗ МАССИВА, "_alpha", Regular.easeIn, 0,50, 10, false);}
Возможно - это элементарно и просто, но, очень прошу помочь.

Старый 23.08.2008, 15:08
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 8  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Вообще, ни разу со встроенным твинером не работал, но предполагаю, что так должно работать:
Код:
for(var i:Number = 0; i < array.length; i++) {
   array[i].onRollOver = function() {
      new Tween(this, "_alpha", Regular.easeIn, 0,50, 10, false);
   }
}

Старый 23.08.2008, 15:49
Мечтатель вне форума Посмотреть профиль Отправить личное сообщение для Мечтатель Найти все сообщения от Мечтатель
  № 9  
Ответить с цитированием
Мечтатель
 
Аватар для Мечтатель

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
Огромное спасибо, Obi! Все работает как НАДО! Полностью рабочий код ниже, можете проверить. )) Может и кому еще пригодится.

Код:
//1. Импортируем классы Tween и Easing
import mx.transitions.Tween;
import mx.transitions.easing.*;

//2. Создаем массив для хранения путей к динамически созданным Movie Clip'ам
var act:Array = new Array();

//3.Создаем переменную, которая, например хранит количество рядов, которое вернула БД MySQL при запросе. 
var count:Number = 3;

//4.Запускаем серию циклов.
for (var i:Number=0; i<count; i++)// Создаем переменную i, устанавливаем ее 
//значение равной нулю. Далее задаем условие выражения, которое у нас будет 
//проверяться перед началом каждой итерации в цикле. 
{
var temp1:MovieClip=this.createEmptyMovieClip("ablock"+i,i);//динамически 
//создаем "мувик", который записываем во временную переменную temp1
temp1.lineStyle(2,0xFFFFFF,100);//параметры линии
temp1.moveTo(20,20);//начальное положение пера (х,у)
temp1.lineTo(60,20);// рисуем прямые
temp1.lineTo(60,60);
temp1.lineTo(20,60);
temp1.lineTo(20,20);
temp1._x=+80*i;//

var temp2:MovieClip = temp1.createEmptyMovieClip("bblock"+i,i);//динамически 
//создаем "мувик", который записываем во временную переменную temp2
temp2.beginFill(0xFF0000,100);//создаем заливку красного цвета (цвет, 
//прозрачность)
temp2.moveTo(22,22);
temp2.lineTo(58,22);
temp2.lineTo(58,58);
temp2.lineTo(22,58);
temp2.lineTo(22,22);
temp2.endFill();
temp2._alpha=0;
act.push(temp2);// push добавляет пути к Movie Clip'ам  в конец массива.

act[i].onRollOver=function(){
var light:Tween= new Tween(this, "_alpha", Regular.easeIn, 0,50, 10, false);}
}

Старый 23.08.2008, 20:12
NoCD вне форума Посмотреть профиль Отправить личное сообщение для NoCD Найти все сообщения от NoCD
  № 10  
Ответить с цитированием
NoCD
 
Аватар для NoCD

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
Когда очень много кнопок, то можно использовать такой код:
---
Код:
button_index=5 // количество будущих кнопок
for(i=0;i< button_index;i++) //создаем цикл с индексом «i»
{     attachMovie("button","button_onPress"+i,i)//Создаем мувиклипы 
//button_onPress" c индексом i

   _root["button_onPress"+i]._x=100 // координаты по оси X
    _root["button_onPress"+i]._y=50*i+100// координаты по оси Y
}

_root.onMouseDown = function() { // используем обработчик событий для левой кнопки
 
for(j=0;j< button_index;j++)// создаем цикл с индексом j, что бы пробежать по всем созданным мувиклипам
{ 
if(_root["button_onPress"+j].hitTest(_xmouse,_ymouse)) { //проверяем расположение курсора мышки при нажатии
     trace("Hello World") //с помощью trace видем «Hello World»
     trace("Кнопка номер "+j) //с помощью trace видем порядковый номер кнопки
}}}
---
немного модернизируем:
добавим в начало кода:
---
Код:
       mas=new Array() //Создаем массив «mas»
       mas=[«Петя»,10,01,«Bася»,«Hello»] // заполняем массив пятью текстовыми и цифровыми значениями

в обработчике кнопки добавим:
trace(«Содержание массива с индексом "+j+» = "+mas[j])
---
Теперь каждая кнопка по своему индексу будет обращаться к массиву «mas»


Последний раз редактировалось NoCD; 23.08.2008 в 20:19.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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