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

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

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

Регистрация: Feb 2006
Сообщений: 41
По умолчанию динамическое создание ссылок/кнопок/мувиклипов

Вопрос, связанный с заточкой данных функций именно под AS3. Раньше делал динамическое создание кнопок (именно текстовых) так, как сейчас нашёл в теме форума из AS2:

Код AS1/AS2:
var my_array = ["Link 1", "Link 2", "Link 3", "Link 4", "Link 5", "Link 6"];
 
for (var i = 0; i<my_array.length; i++) {
	var mc = this.createEmptyMovieClip("target_mc"+i, i);
	mc._y = 30*i;
	var mc_txt = mc.createTextField("txt", 0, 0, 0, 100, 30);
	mc_txt.border = true;
	mc_txt.text = my_array[i];
	//
	mc.onPress = function() {
		trace(this.txt.text);
	};
}
Подскажите, как переделать под AS3? облазил это весь поиск этим динамическим созданием ссылок, но всё только с AS2 =(

очень прошу подсказать решение.. или может быть всё-таки это где-то обсуждалось, да я не нашёл..

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Код AS3:
var myArray:Array = ["Link 1", "Link 2", "Link 3", "Link 4", "Link 5", "Link 6"];
for(var i:int = 0; i < myArray.length; i++) {
   var mc:Sprite = new Sprite();
   mc.y = 30*i;
 
   var tf:TextField = new TextField();
   tf.autoSize = TextFieldAutoSize.LEFT;
   tf.border = true;
   tf.name = 'buttonTextField';
   tf.text = myArray[i] as String;
 
   mc.addChild(tf);
   mc.addEventListener(MouseEvent.CLICK, buttonClickHandler);
 
   addChild(mc);
}
 
function buttonClickHandler(event:MouseEvent):void {
   var btn:Sprite = event.currentTarget as Sprite;
   var tf:TextField = btn.getChildByName('buttonTextField') as TextField;
   trace('clicked text:', tf.text);
}
__________________
#flasher@irc.trg.ru:6667


Последний раз редактировалось Obi; 10.09.2010 в 12:49.
Старый 10.09.2010, 12:52
shuhermayer вне форума Посмотреть профиль Отправить личное сообщение для shuhermayer Найти все сообщения от shuhermayer
  № 3  
Ответить с цитированием
shuhermayer

Регистрация: Feb 2006
Сообщений: 41
спасибо! надо конечно учить AS3..

а почему забыть про динамические св-ва и MC? чем они по сути плохи стали?

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Цитата:
Сообщение от shuhermayer Посмотреть сообщение
спасибо! надо конечно учить AS3..

а почему забыть про динамические св-ва и MC? чем они по сути плохи стали?
Они не стали, они и были плохи, просто в ас1 приходилось с этим мириться (да и то не всем).

А плохи они например тем, что используя динамические свойства вы отказываетесь от статической проверки кода компилятором, и когда у вас внезапно в текстовом поле отобразится NaN, вы сломаете голову, прежде чем найдете ошибку.

Или тем, что в конкретный момент времени проблематично узнать, какие данные содержит объект.

Или тем, что читабильность кода, в котором используются динамические свойства, ниже плинтуса.

Или тем, что обращение к динамическим свойствам на порядок медленнее.
__________________
#flasher@irc.trg.ru:6667


Последний раз редактировалось Obi; 10.09.2010 в 13:13.
Старый 10.09.2010, 13:01
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Динамические св-ва и были плохи, они ж не бесплатны, понятное дело. Больше памяти жрут динамические классы как минимум.
В MC всё равно нельзя добавить програмно кадры, потому (если не считать того, что МС dynamic, но про это см. первое предложение) тут лучше спрайт.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
По-моему в вашем тексте можно заменить "динамические свойства" на getChildByName %) Но его хоть явно видно, когда используют.
Пост ниже советую топикстартеру ценить, там код лишен всех недостатков динамических штук (а писать такое по поводу такого вопроса на форуме обычно лень).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 10.09.2010 в 14:07.
Старый 10.09.2010, 13:54
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 7  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Цитата:
Сообщение от -De- Посмотреть сообщение
По-моему в вашем тексте можно заменить "динамические свойства" на getChildByName %) Но его хоть явно видно, когда используют.
Я рассуждал на тему динамических свойств не относительно этого примера, а в целом.
Но если уж быть дотошным, то правильнее было-бы написать нечто вроде этого:

Код AS3:
package {
 
 
   class MyClass extends Sprite {
 
      private var _myArray:Array;
 
      public function MyClass() {
 
       _myArray = ["Link 1", "Link 2", "Link 3", "Link 4", "Link 5", "Link 6"];
 
       for(var i:int = 0; i < myArray.length; i++) {
           var btn:MyBtn = new MyBtn(_myArray[i] as String);
           btn.y = 30*i;
           btn.addEventListener(MouseEvent.CLICK, buttonClickHandler);
           addChild(btn);
       }
 
      }
 
      private function buttonClickHandler(event:MouseEvent):void {
         var btn:MyBtn = event.currentTarget as MyBtn;
         trace('clicked text:', btn.link);
      }
   }
 
   class MyBtn extends Sprite {
 
      private var _link:String;
 
      public function MyBtn(link:String) {
         _link = link;
         var tf:TextField = new TextField();
         tf.autoSize = TextFieldAutoSize.LEFT;
         tf.border = true;
         tf.text = link;
         addChild(tf);
      }
 
      public funciton get link():String {
          return _link;
      }
   }
}
__________________
#flasher@irc.trg.ru:6667

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

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

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


 


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


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