![]() |
|
||||||||||
|
|||||
|
Здравствуйте уважаемые флешеры! Не знаю точно, как назвать эту тему, поэтому боюсь в ответ услышать
"Название темы не отражает сути вопроса." Суть такая. Я сделал небольшой эффект набирающегося текста. Разместил его в классе (моя первая работа с классами ). Все работает как надо. Но! Если не дожидаясь окончания эффекта, снова запустить его, получается что-то не очень хорошее.Прошу помощи. Вот пример класса: 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;
}
}
}
|
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Здравствуйте ВВОY Ильич!
Начнем с общих вопросов: 1. Что должен делать класс? 2. На сколько я понимаю, экземпляры класса создавать ненужно, т.е. он у Вас будет как Math. 3. Зачем парсить строку на предмет создания массива, когда можно сразу создать массив: Цитата:
5. Не делайте многочисленных вызовов одного и того же: Лучше создайте переменную и один раз вызовите метод substr. Поскольку переменные хранятся в регистрах процессора это может привести к значительной оптимизации производительности. 6. И последнее, самое важное - сделайте класс с конструктором, чтобы можно было создавать несколько экземпляров класса. Причина такого поведения возможно скрыта в том, что Вы передаете в класс сслыку на объект TextField во время первого выполнения. Код в классе еще не выполнился и значения в tf.text меняются динамически. Потом, недожидаясь окончания работы кода Вы запускаете еще один поток кода. И опять передаете ссылку на объект TextField в класс. Но объект TextField все еще меняется. Т.е. оба кода активно участвуют в изменении tf при этом анализируя значения в нем меняемые друг другом. Возможно, это и есть причина "абракадабры".
__________________
Случайность, господа, это знаете ли непознанная необходимость. Последний раз редактировалось Alex_beginner; 30.06.2008 в 21:58. |
|
|||||
|
Здравствуйте, Alex_beginner!
Большое спасибо за ответ. Я с классами раньше дела не имел, поэтому слобо представляю себе, как сделать класс с конструктором. Понял причину получаемой "абракадабры", но так и не смог понять, как исправить =( |
|
|||||
|
Это у вас не класс. Это функция засунутая в static-функцию класса.
И это ужасно, я считаю. Попробуйте посоздавать классы попроще. Разберитесь с методами, аттрибутами, с конструктором и прочими прелестями классов. Вообще, курс ООП желательно начинать с ноля, да. Ну и по теме - у вас не очищается ранее созданный интервал при вызове функции. Оттого и эффект такой. Чинить этот класс не стоит, лучше создайте новый, нормальный. |
|
|||||
|
сколько ж всего вылезло в хелпе по запросу "class" =) Ладно, ничего, с классами разберемся... Большое Вам спасибо за ответы.
И все-таки мне хочется узнать, как именно мне исправить свой код, чтобы не было этой путаницы. Может ну его, этот внешний .as? Размещу код в самой флешке, да и буду убивать интервал... Если у кого-нибудь найдется немного времени и желание помочь, напишите пожалуйста "правильную" версию моего недокласса. Хочется посмотреть на то, как должно быть правильно и впредь писать только так =). Буду премного благодарен. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|