Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Оптимизация кода в MX. SetInterval() и другие животные. (http://www.flasher.ru/forum/showthread.php?t=37132)

Акакий Акакиевич 13.09.2002 17:08

Оптимизация кода в MX. SetInterval() и другие животные.
 
Господа, помогите пожалуйста оптимизировать код. Впервые решил сделать весь код в первом кадре, а не разбрасывать по всему клипу, благо MX даёт такую возможность. Но в связи с этим появляются некоторые проблемы с циклами при использовании setInterval().

Задача: имеются восемь текстовых полей для посимвольного отображения подписей (text[m]).

text = new Array();
text[0] = "bla-bla";
text[1] = " bla-bla 1";
/*……
*/……
text[7] = " bla-bla 7";
//
/*
Функция ekr() служит для их заполнения из массива text
*/
//
function ekr(m) {
for (i=0; i<=8; i++) {
set('_root.sim'+i, text[m].charAt(i));
}
}
//
/*
А вот тут самый главный геморрой – необходимо сделать так, чтобы надписи циклично менялись через заданный промежуток времени по событию (нажатие кнопки). Ниже приведённая функция smena() отвечает за последовательное отображение двух любых подписей из массива (nach, kon) через промежуток времени (prom). А вот дальше есть функция loop() – это рабочий вариант, но работает не непрерывно.
*/
//
function smena(nach, kon, prom) {
ekr(nach);
function delay() {
ekr(kon);
clearInterval(delaySt);
}
delaySt = setInterval(delay, prom);
}
//
function looop(strtCik , stpCik , delaaaay) {
smena(strtcik,strtcik+1,delaaaay);
function delay1() {
smena(strtcik+1,strtcik+2,delaaaay);
clearInterval(delaySt1);
}
delaySt1 = setinterval(delay1, delaaaay);
}
//
_root.panel.onOffKn.onRelease = function() {
looop(3,5,2000);
};

Вопрос: как заставить onRelease крутиться непрерывно любые надписи через любой промежуток времени до наступления другого события? Как сделать всё это во фреймах – примерно представляю, а вот как в одном кадре с setInterval()… что-то совсем запарился:( И, как мне кажется, в тему ещё вопрос: как проиграть из пятисекундного звука только промежуток с 3-й по 4-ю секунду и сделать воспроизведение этого звука непрерывным, а обрывать его по событию.
Буду рад любому ответу, кроме ответов, содержащих сентенции по поводу моего не блестящего интеллекта:). Заранее согласен, что код, написанный мною плох, потому и прошу о помощи.
Заранее благодарю, Ваш Акакий.

Акакий Акакиевич 14.09.2002 15:09

Впервые такой "удачный" топик вывесил:)
27 просмотров и ни одного ответа...
Не проходите мимо, монстры флеш!:)

Nox Noctis 14.09.2002 15:25

прочитал это вчера вечером, понял что нихрена не понял, и решил попробовать сегодня :)
попробовал...
...с тем же результатом примерно :))

скажи чего ты добиваешься, а ? без всякого кода, и с как можно меньшим количеством слов ;))

Aib 15.09.2002 00:04

Ну, если Я Тебя правильно понял...
Перемещение клипа под маской работает чуть быстрее, чм изменение видимости двух клипов.
Потом, не совсем понимаю, на кой тебе setInterval. Используй событие onEnterFrame - эффект будет как при использовании нескольких фрэймов.

2Nox Noctis: Привет! Поздравь с возвращением :) :) :)
Кстати, не будель ли Ты так добр протестить вот это. Работает только под IE.

Nox Noctis 15.09.2002 00:55

Aib, а как оно должно работать ? :))
че-то не пашет там у тебя ничего :)

а в сырке аот это чудо написано:
Цитата:

ааааfunction killMenu(){
ааааааif (event.button == 2){
ааааааа sendToFlash();
ааааааа disableContext();
аааааа}
аааа}

function disableContext(){
аааа parent.frames[1].location.replace('javascript: parent.dummy1');
аааа parent.frames[1].back();
аа }
:) что-то лыжи не едут, определенно... :)

Aib 15.09.2002 01:52

2Nox Noctis
Там кнопка копирования должна работать . По правой клавише, нажатой над текстовым полем, должна появлятся кнопка. По ёё нажатию в буфер обмена должен копироваться выделенный текст из поля.
Дома всё пашет. А загрузил на сервер - лажа какая-то. У Тебя хоть сорец появился (часть сорца). А у Меня вообще нифига - белая страница (без ошибки 404 :eek: ). Мож с серваком траблы :confused:

2Акакий Акакиевич
Если нужно вызывать по нажатию кнопки, то опиши все действия в отдельной функции, и присваивай onEnterFrame в момент срабатывания события. По окончании действа присвой null.

Nox Noctis 15.09.2002 01:57

Цитата:

Оригинал написал(а) Aib
по окончании действа присвой null
тогда уж лучше не нулл,
а написать "delete onEnterFrame" ;)
просто чище :)
потому как нулл-то все равно будет вызываться - хоть и эффекта никакого - пустячок, а не приятно :)

Акакий Акакиевич 15.09.2002 12:12

to NN:

на словах и коротко: должны крутиться надписи через определённый промежуток времени непрерывно. Надпись нужно менять динамически, задержку тоже.
Вот, собственно, и всё:)

Заранее благодарю, Акакий

Nox Noctis 15.09.2002 17:39

вот :)
мм... как-то громоздко, но работает :)

Код:

this.createTextField("tf", 1, 10, 200, 0, 0);
tf.border=true, tf.autoSize=true;
tf.type = "input";
//
txt = ["#1: qwertyqwerty", "#2: yuiopsyuiops", "#3: asdfghasdfgh", "#4: ghjklmghjklm"];
this.createEmptyMovieClip("ctrl", 666);
setText = function () {
        tellTarget (ctrl) {
                clearInterval(id);
                delete id;
                ctext = _root.txt[idx];
                idx = (idx == _root.txt.length-1) ? (0) : idx+1;
                field.text = "";
                onEnterFrame = function () {
                        tellTarget (ctrl) {
                                if (field.text != ctext) {
                                        field.text += ctext.charAt(field.text.length);
                                } else {
                                        id = setInterval(_root.setText, timer);
                                        delete onEnterFrame;
                                }
                        }
                }
        }
};
init = function (field, delay, start) {
        ctrl.idx = (!start || start>_root.txt.length-1) ? (0) : start;
        ctrl.field = field;
        ctrl.timer = delay;
        setText();
};
cancel = function () {
        clearInterval(ctrl.id);
        delete ctrl.onEnterFrame;
        ctrl.removeMovieClip();
};
init(tf, 3000);
this.onMouseDown = cancel;


Акакий Акакиевич 15.09.2002 17:43

Спасибо Вам огромное NN!
Полезу проверять и приспосабливать под свои задачи:)
С благодарностью, Ваш Акакий


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

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