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

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

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

Регистрация: Nov 2007
Сообщений: 256
Записей в блоге: 1
Отправить сообщение для BBOY Ильич с помощью ICQ
По умолчанию Эффект набора текста

Здравствуйте уважаемые флешеры! Не знаю точно, как назвать эту тему, поэтому боюсь в ответ услышать
"Название темы не отражает сути вопроса."

Суть такая. Я сделал небольшой эффект набирающегося текста. Разместил его в классе (моя первая работа с классами ). Все работает как надо. Но! Если не дожидаясь окончания эффекта, снова запустить его, получается что-то не очень хорошее.
Прошу помощи.

Вот пример класса:
Код:
class RandLetters {
	static function randLetter(string:String,tf:TextField,speed:Number,numberOfChars:Number) {
		var alp:String="a b c d e f g h u j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0";
		var delay:Number=0;
		var alph:Array=alp.split(" ");
		var arr:Array=[];
		var currChar:Number=0;
		var randInt,randLett,i,rand;
		createArr();
		randInt=setInterval(randLetters,speed);
		function createArr() {
			for (i=0; i < string.length; i++) {
				if (string.substr(i,1) != String.fromCharCode(13)) {
					arr.push(string.substr(i,1));
				}
			}
		}
		function randLetters() {
			rand=random(alph.length);
			randLett=alph[rand];
			tf.text=tf.text.substr(0,tf.text.length - 1) + randLett;
			delay == numberOfChars?stopRand():delay++;
		}
		function stopRand() {
			tf.text=tf.text.substr(0,tf.text.length - 1) + arr[currChar] + " ";
			currChar < arr.length - 1?currChar++:clearInterval(randInt);
			delay=0;
		}
	}
}

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

Регистрация: May 2008
Сообщений: 476
Здравствуйте ВВОY Ильич!

Начнем с общих вопросов:

1. Что должен делать класс?
2. На сколько я понимаю, экземпляры класса создавать ненужно, т.е. он у Вас будет как Math.
3. Зачем парсить строку на предмет создания массива, когда можно сразу создать массив:
Цитата:
Код:
var alp:String="a b c d e f g h u j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0";
		var delay:Number=0;
		var alph:Array=alp.split(" ");
4. Не везде произведена типизация переменных. Желательно типизировать - хороший стиль программирования.
5. Не делайте многочисленных вызовов одного и того же:

Цитата:
Код:
string.substr(i,1)
Лучше создайте переменную и один раз вызовите метод substr. Поскольку переменные хранятся в регистрах процессора это может привести к значительной оптимизации производительности.
6. И последнее, самое важное - сделайте класс с конструктором, чтобы можно было создавать несколько экземпляров класса.

Причина такого поведения возможно скрыта в том, что Вы передаете в класс сслыку на объект TextField во время первого выполнения. Код в классе еще не выполнился и значения в tf.text меняются динамически. Потом, недожидаясь окончания работы кода Вы запускаете еще один поток кода. И опять передаете ссылку на объект TextField в класс. Но объект TextField все еще меняется. Т.е. оба кода активно участвуют в изменении tf при этом анализируя значения в нем меняемые друг другом. Возможно, это и есть причина "абракадабры".
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 30.06.2008 в 21:58.
Старый 02.07.2008, 16:22
BBOY Ильич вне форума Посмотреть профиль Отправить личное сообщение для BBOY Ильич Найти все сообщения от BBOY Ильич
  № 3  
Ответить с цитированием
BBOY Ильич
 
Аватар для BBOY Ильич

Регистрация: Nov 2007
Сообщений: 256
Записей в блоге: 1
Отправить сообщение для BBOY Ильич с помощью ICQ
Здравствуйте, Alex_beginner!
Большое спасибо за ответ. Я с классами раньше дела не имел, поэтому слобо представляю себе, как сделать класс с конструктором.
Понял причину получаемой "абракадабры", но так и не смог понять, как исправить =(

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Это у вас не класс. Это функция засунутая в static-функцию класса.
И это ужасно, я считаю.
Попробуйте посоздавать классы попроще. Разберитесь с методами, аттрибутами, с конструктором и прочими прелестями классов. Вообще, курс ООП желательно начинать с ноля, да.

Ну и по теме - у вас не очищается ранее созданный интервал при вызове функции. Оттого и эффект такой.
Чинить этот класс не стоит, лучше создайте новый, нормальный.

Старый 02.07.2008, 16:43
BBOY Ильич вне форума Посмотреть профиль Отправить личное сообщение для BBOY Ильич Найти все сообщения от BBOY Ильич
  № 5  
Ответить с цитированием
BBOY Ильич
 
Аватар для BBOY Ильич

Регистрация: Nov 2007
Сообщений: 256
Записей в блоге: 1
Отправить сообщение для BBOY Ильич с помощью ICQ
Спасибо. Я бы с радостью создал нормальный класс, но не знаю, как он должен выглядеть =) Можно простой примерчик или статейку, где можно было бы поближе познакомится с классами?

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Простой примерчик есть в хелпе. Наберите слово class, выделите его и нажмите F1.

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

Регистрация: Nov 2007
Сообщений: 256
Записей в блоге: 1
Отправить сообщение для BBOY Ильич с помощью ICQ
сколько ж всего вылезло в хелпе по запросу "class" =) Ладно, ничего, с классами разберемся... Большое Вам спасибо за ответы.

И все-таки мне хочется узнать, как именно мне исправить свой код, чтобы не было этой путаницы. Может ну его, этот внешний .as? Размещу код в самой флешке, да и буду убивать интервал...
Если у кого-нибудь найдется немного времени и желание помочь, напишите пожалуйста "правильную" версию моего недокласса. Хочется посмотреть на то, как должно быть правильно и впредь писать только так =). Буду премного благодарен.

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Я имел ввиду это:
ActionScript 2.0 Language Reference
ActionScript language elements > Statements > class statement

Старый 02.07.2008, 17:35
BBOY Ильич вне форума Посмотреть профиль Отправить личное сообщение для BBOY Ильич Найти все сообщения от BBOY Ильич
  № 9  
Ответить с цитированием
BBOY Ильич
 
Аватар для BBOY Ильич

Регистрация: Nov 2007
Сообщений: 256
Записей в блоге: 1
Отправить сообщение для BBOY Ильич с помощью ICQ
Спасибо

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

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

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


 


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


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