|
|
|
| Добрый день, друзья!
Возник вопрос по создания динамических имен для переменных. Реально ли такое в 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 страницы, поисковик не нашел подобных тем. | |
|
|
|
|
|
|
|
для: 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]);
}
|
| |
|
|
|
|
|
|
|
для: cheops
(04.02.2012 в 18:28)
| | Большое спасибо! Будем пробовать массивы. | |
|
|
|
|
|
|
|
для: 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);
|
спасибо! | |
|
|
|
|
|
|
|
для: ADmexture
(04.02.2012 в 19:42)
| | Вот эти coll1-coll12 - это кто? И нельзя ли их организовать в виде массива?
Кроме того, у меня большое подозрение, что обработчик у них явно должен быть один, т.е. вместо coll1Func - coll12Func, должна быть одна функция collFunc. | |
|
|
|
|
|
|
|
для: cheops
(04.02.2012 в 20:03)
| | Да, действительно. Все же можно через одну функцию сделать, у них реально действия одинаковые. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: cheops
(05.02.2012 в 11:01)
| | "их можно создавать сразу в цикле в массиве, а потом добавлять элементы массива"
А это как, сразу в цикле в массиве? Расскажите пожалуйста, или может ссылку на ресурс.
Спасибо! | |
|
|
|
|
|
|
|
для: ADmexture
(05.02.2012 в 14:24)
| | >"их можно создавать сразу в цикле в массиве, а потом добавлять элементы массива"
>А это как, сразу в цикле в массиве? Расскажите пожалуйста,
Для начала давайте определимся что такое coll1 - это просто квадратик или вы уже создали такой символ в библиотеке. Мне нужны либо инструкции, как вы его создаете, либо мини-проект, который содержит в себе этот элемент. Или если хотите я могу подготовить такой мини-проект, только мне нужно больше подробностей о том, что такое coll1 и как вы его дальше хотите использовать (что это будет фотогалерея или что?).
> или может ссылку на ресурс.
Да собственно вот он ресурс и есть, давайте тут разбираться, а то Google ссылается на кучи форумов, которые ссылаются на Google. Нужно где-то этот порочный круг разрывать :), Google мы поправить с вами не можем, а тут прояснить можем любые вопросы. Только скорее всего мы уже в новую тему откочуем. | |
|
|
|
|
|
|
|
для: ADmexture
(05.02.2012 в 14:24)
| | Или я могу показать, как создавать их из кода, создавая объекты класса и добавляя их в спрайт? Т.е. будет девственно чистое поле исходного спрайта, а уже код добавит 12 элементов, и повесит на них обработчики? Собственно ActionScript 3.0 к этому и побуждает разработчиков: строить объектно-ориентированную иерархию классов, а не программировать динамику на временной шкале. | |
|
|
|
|
 1.2 Мб |
|
|
для: cheops
(05.02.2012 в 14:35)
| | Coll1...Coll12 - это имя экземпляров символов.
Для наглядности они находятся по адресу: http://cwib.ru/firstSwf/
Это вот эти маленькие картинки на главной, их там 12 штук :)
Я прикрепил index.fla файл в приложении, не судите строго, это моя первая работа во flash.
Моей задачей было как то автоматизировать вывод этих мини-изображений на странице. | |
|
|
|
|
|
|
|
для: ADmexture
(05.02.2012 в 14:49)
| | Вы пишите в стиле ActionScript 2.0, т.е. у вас код находится на временной шкале, а не в отдельном файле с расширением as. Более того, даже если использовать этот стиль, вы весь код разместили на главной шкале, а ведь у каждого символа в библиотеке есть своя собственная временная шкала. Т.е. код, который обслуживает 12 фотографий можно разместить внутри символа newCollGall, а еще лучше внутри символа coll, который должен быть один (его можно 12 раз использовать, но в библиотеке он должен быть один). Потом если вы захотите использовать этот символ в другом проекте, вы его сможете скопировать вместе с кодом, а так вам придется снова создавать код на главной шкале, а так вам приходится полотно кода в 500 строк писать. Это если программировать на шкале, а не в отдельно as-файле (а это рано или поздно придется делать).
При программировании в стиле ActionScript 3.0 вы вообще никакого кода на временной шкале не размещаете, вы в свойствах символа отмечаете галку "Экспорт для ActionScript" и назначаете символу или ролику свой собственный класс (который размещается в отдельном ActionScript-файле), а уже в классе вы программируете его функциональность. | |
|
|
|
|
|
|
|
для: cheops
(05.02.2012 в 15:18)
| | Спасибо большое за пояснение!
"их можно создавать сразу в цикле в массиве, а потом добавлять элементы массива" - а как это сделать? можно пожалуйста код, на каком нибудь простеньком примере? | |
|
|
|
|
|
|
|
для: ADmexture
(05.02.2012 в 15:25)
| | Сейчас подготовлю. | |
|
|
|
|
|
|
|
для: cheops
(05.02.2012 в 15:28)
| | Как круто!
http://softtime.ru/actionscripts/gallery.php
Сейчас буду пробовать =))) | |
|
|
|
|
|
|
|
для: ADmexture
(05.02.2012 в 17:50)
| | Нашли уже :))) Только обсуждение давайте в новой теме продолжим, а то эта уже длинная. | |
|
|
|
|
|
|
|
для: cheops
(05.02.2012 в 17:51)
| | Хорошо! | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|