Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Flash

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическое создание имени переменных
 
 автор: ADmexture   (04.02.2012 в 18:17)   письмо автору
 
 

Добрый день, друзья!

Возник вопрос по создания динамических имен для переменных. Реально ли такое в as3.0?

Мой неудавшийся план по созданию: =)

for(var i:int = 1; i<=12; i++)
{
    var ai:String = "Hello World" + i
    trace(ai);
    aboutCompanyLabel.text = String(ai);
}


Как надо правильно прописывать значение i, чтобы создавалось 12 переменных?:

var a1:String = "Hello world" + 1;
....
var a2:String = "Hello world" + 2;


Буду рад вашей помощи!
Если тема уже поднималась ранее, укажите пожалуйста url страницы, поисковик не нашел подобных тем.

  Ответить  
 
 автор: cheops   (04.02.2012 в 18:28)   письмо автору
 
   для: ADmexture   (04.02.2012 в 18:17)
 

Для таких множеств обычно задействуют массивы
var arr:Array = new Array(12);
for(var i:int = 0; i < 12; i++) 

    arr[i] = "Hello World" + i;  
    trace(arr[i]); 
    aboutCompanyLabel.text = String(arr[i]); 
}

  Ответить  
 
 автор: ADmexture   (04.02.2012 в 18:43)   письмо автору
 
   для: cheops   (04.02.2012 в 18:28)
 

Большое спасибо! Будем пробовать массивы.

  Ответить  
 
 автор: ADmexture   (04.02.2012 в 19:42)   письмо автору
 
   для: cheops   (04.02.2012 в 18:28)
 

А не подскажите еще такой вот момент. Есть слушатели событий, и они различаются по названием в числовом порядке от 1 до 12.
можно ли как нибудь это то же загнать в цикл?

привожу пример моего способа, но я ведать что то опять упустил.

var arr:Array = new Array(11); 
for(var i:int = 1; i < 12; i++)  
{  
    arr[i] = "coll" + i;
    var nameFunc:String = arr[i] + "Func";

    mainGall.arr[i].addEventListener(MouseEvent.MOUSE_OVER, nameFunc);
}


т.е. слушатели должны иметь конечный вид, типа:

mainGall.coll1.addEventListener(MouseEvent.MOUSE_OVER, coll1Func);
....
mainGall.coll12.addEventListener(MouseEvent.MOUSE_OVER, coll12Func);


спасибо!

  Ответить  
 
 автор: cheops   (04.02.2012 в 20:03)   письмо автору
 
   для: ADmexture   (04.02.2012 в 19:42)
 

Вот эти coll1-coll12 - это кто? И нельзя ли их организовать в виде массива?
Кроме того, у меня большое подозрение, что обработчик у них явно должен быть один, т.е. вместо coll1Func - coll12Func, должна быть одна функция collFunc.

  Ответить  
 
 автор: ADmexture   (04.02.2012 в 20:47)   письмо автору
 
   для: cheops   (04.02.2012 в 20:03)
 

Да, действительно. Все же можно через одну функцию сделать, у них реально действия одинаковые.

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 02:20)   письмо автору
 
   для: ADmexture   (04.02.2012 в 20:47)
 

Напишу здесь как у меня получилось добиться нужного результата. Может кому нибудь и пригодится.

Цель: нужно как то передавать параметр i(1,....12) от кнопки, чтобы каждый раз не создавать новые слушатель вручную для определенной повторяющейся функции, с одинаковыми действиями, которая различается только i(1,...12).

Если бы можно было сделать код:

for (var i:int = 1; i<=12; i++)
{
NAME[b]i[/b].addEventListener(MouseEvent.NAME_EVENT, onClickFunc([b]i[/b]));
}


то все бы было красиво, но к сожалению как это реализовать, для меня секрет, да и параметры в функцию слушающую событие не передать никак (думаю это временно).

Пришлось написать все 12 строк слушателей, обращающиеся к функциям одного направления.
В данном случае у меня есть кнопки. Так как пользователь не может нажать на кнопку не проведя над ней указателем мыши, то получился такой вот план как передать параметр, перекинув его через addEventListener:


//создаем изначально переменную, которая будет хранить параметр
var endVar:int;

//создаем прослушиватели для кнопок
myBtn1.addEventListener(MouseEvent.MOUSE_OVER, onMyBtnFunc1);
myBtn2.addEventListener(MouseEvent.MOUSE_OVER, onMyBtnFunc2);
myBtn3.addEventListener(MouseEvent.MOUSE_OVER, onMyBtnFunc3);

//так как в addEventListener  в функции onMyBtnFunc параметров не передать,
//то приходится делать обходной путь

function onMyBtnFunc1(e:MouseEvent, myBtnNum:int = 1):void
{
      endVar = myBtnNnum;

// слушатель CLICK для кнопки myBtn1
myBtn1.addEventListener(MouseEvent.CLICK, btnClick);      

}

function onMyBtnFunc2(e:MouseEvent, myBtnNum:int = 2):void
{
      endVar = myBtnNnum;

// слушатель CLICK для кнопки myBtn2
myBtn2.addEventListener(MouseEvent.CLICK, btnClick);      

}

function onMyBtnFunc3(e:MouseEvent, myBtnNum:int = 3):void
{
      endVar = myBtnNnum;

// слушатель CLICK для кнопки myBtn3
myBtn3.addEventListener(MouseEvent.CLICK, btnClick);      

}

//Теперь сама функция btnClick

function btnClick(e:MouseEvent):void
{
   trace(endVar);
}



Если у кого то есть лучшие решения как можно передавать параметры от кнопок,
свяжитесь пожалуйста со мной по e-mail: ranendra2012@yandex.ru

  Ответить  
 
 автор: cheops   (05.02.2012 в 11:01)   письмо автору
 
   для: ADmexture   (05.02.2012 в 02:20)
 

У вас же ActionScript 3? Вы во-первых имеете возможность все элементы располагать на спрайте/канве программно, т.е. их можно создавать сразу в цикле в массиве, а потом добавлять элементы массива. Даже если вы добавляете элементы вручную вы можете назначить символу класс-обработчик, каждой из двенадцати кнопок один и тот же класс-обработчик, расположенный в одном файле .as и одни и тем же кодом обслуживающий все 12 кнопок.
package dynamicbutton{
  import flash.display.*;
  import flash.events.*;
  import flash.utils.Timer;
  public class buttons extends MovieClip {
    public function buttons():void{
      this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
      this.addEventListener(MouseEvent.CLICK, onMouseClick);
    }
    // Обработчик MOUSE_OVER
    public function onMouseOver(e:MouseEvent):void { 
      trace("Событие MOUSE_OVER");       
    }
    // Обработчик MOUSE_CLICK
    public function onMouseClick(e:MouseEvent):void { 
      trace("Событие MOUSE_CLICK");
    }
  }
}
Т.е. не нужно перечислять все кнопки по их именам, пусть на нужную кнопку покажет ключевое слово this.

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 14:24)   письмо автору
 
   для: cheops   (05.02.2012 в 11:01)
 

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

А это как, сразу в цикле в массиве? Расскажите пожалуйста, или может ссылку на ресурс.
Спасибо!

  Ответить  
 
 автор: cheops   (05.02.2012 в 14:33)   письмо автору
 
   для: ADmexture   (05.02.2012 в 14:24)
 

>"их можно создавать сразу в цикле в массиве, а потом добавлять элементы массива"
>А это как, сразу в цикле в массиве? Расскажите пожалуйста,
Для начала давайте определимся что такое coll1 - это просто квадратик или вы уже создали такой символ в библиотеке. Мне нужны либо инструкции, как вы его создаете, либо мини-проект, который содержит в себе этот элемент. Или если хотите я могу подготовить такой мини-проект, только мне нужно больше подробностей о том, что такое coll1 и как вы его дальше хотите использовать (что это будет фотогалерея или что?).

> или может ссылку на ресурс.
Да собственно вот он ресурс и есть, давайте тут разбираться, а то Google ссылается на кучи форумов, которые ссылаются на Google. Нужно где-то этот порочный круг разрывать :), Google мы поправить с вами не можем, а тут прояснить можем любые вопросы. Только скорее всего мы уже в новую тему откочуем.

  Ответить  
 
 автор: cheops   (05.02.2012 в 14:35)   письмо автору
 
   для: ADmexture   (05.02.2012 в 14:24)
 

Или я могу показать, как создавать их из кода, создавая объекты класса и добавляя их в спрайт? Т.е. будет девственно чистое поле исходного спрайта, а уже код добавит 12 элементов, и повесит на них обработчики? Собственно ActionScript 3.0 к этому и побуждает разработчиков: строить объектно-ориентированную иерархию классов, а не программировать динамику на временной шкале.

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 14:49)   письмо автору
1.2 Мб
 
   для: cheops   (05.02.2012 в 14:35)
 

Coll1...Coll12 - это имя экземпляров символов.

Для наглядности они находятся по адресу: http://cwib.ru/firstSwf/
Это вот эти маленькие картинки на главной, их там 12 штук :)

Я прикрепил index.fla файл в приложении, не судите строго, это моя первая работа во flash.

Моей задачей было как то автоматизировать вывод этих мини-изображений на странице.

  Ответить  
 
 автор: cheops   (05.02.2012 в 15:18)   письмо автору
 
   для: ADmexture   (05.02.2012 в 14:49)
 

Вы пишите в стиле ActionScript 2.0, т.е. у вас код находится на временной шкале, а не в отдельном файле с расширением as. Более того, даже если использовать этот стиль, вы весь код разместили на главной шкале, а ведь у каждого символа в библиотеке есть своя собственная временная шкала. Т.е. код, который обслуживает 12 фотографий можно разместить внутри символа newCollGall, а еще лучше внутри символа coll, который должен быть один (его можно 12 раз использовать, но в библиотеке он должен быть один). Потом если вы захотите использовать этот символ в другом проекте, вы его сможете скопировать вместе с кодом, а так вам придется снова создавать код на главной шкале, а так вам приходится полотно кода в 500 строк писать. Это если программировать на шкале, а не в отдельно as-файле (а это рано или поздно придется делать).

При программировании в стиле ActionScript 3.0 вы вообще никакого кода на временной шкале не размещаете, вы в свойствах символа отмечаете галку "Экспорт для ActionScript" и назначаете символу или ролику свой собственный класс (который размещается в отдельном ActionScript-файле), а уже в классе вы программируете его функциональность.

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 15:25)   письмо автору
 
   для: cheops   (05.02.2012 в 15:18)
 

Спасибо большое за пояснение!

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

  Ответить  
 
 автор: cheops   (05.02.2012 в 15:28)   письмо автору
 
   для: ADmexture   (05.02.2012 в 15:25)
 

Сейчас подготовлю.

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 17:50)   письмо автору
 
   для: cheops   (05.02.2012 в 15:28)
 

Как круто!
http://softtime.ru/actionscripts/gallery.php
Сейчас буду пробовать =)))

  Ответить  
 
 автор: cheops   (05.02.2012 в 17:51)   письмо автору
 
   для: ADmexture   (05.02.2012 в 17:50)
 

Нашли уже :))) Только обсуждение давайте в новой теме продолжим, а то эта уже длинная.

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 17:59)   письмо автору
 
   для: cheops   (05.02.2012 в 17:51)
 

Хорошо!

  Ответить  
 
 автор: cheops   (05.02.2012 в 11:02)   письмо автору
 
   для: ADmexture   (05.02.2012 в 02:20)
 

К тому же смотрите что вы делаете
function onMyBtnFunc1(e:MouseEvent, myBtnNum:int = 1):void 

      endVar = myBtnNnum; 

// слушатель CLICK для кнопки myBtn1 
myBtn1.addEventListener(MouseEvent.CLICK, btnClick);       

}
Вы при каждом наведении мыши назначаете обработчик события Click, это лучше делать один раз, там же, где вы назначаете обработчик для события MOUSE_OVER

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования