Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   onEnterFrame - тормозит ли ролик, и возможно его восст после break? (http://www.flasher.ru/forum/showthread.php?t=90816)

MINASTIS 18.01.2007 18:48

onEnterFrame - тормозит ли ролик, и возможно его восст после break?
 
Приветствую. После столь долгого отсутствия я вернулся, и причем как ни странно в середине сессии :)
Есть интересные вопросы. Допустим мой типичный код для показа текста "эффектом печатной машинки".
Код:

var xmlvar;
xmlvar = xmlvar.firstChild.firstChild.nextSibling;
var i:Number = 0;
var tex:String = "";
var mel:String = "";
var up:Boolean = false;
var down:Boolean = false;
pole.html = true;
while (xmlvar.firstChild.nodeValue != undefined) {
tex+="<b><font color='#F7FFD5'>Added:</font></b>"+xmlvar.attributes.name+"\n";
tex+="<b><font color='#F7FFD5'>Date:</font></b>"+xmlvar.attributes.date+"\n";
tex+=xmlvar.firstChild.nodeValue;
tex+="<hr>";
xmlvar = xmlvar.nextSibling.nextSibling;
}
this.onEnterFrame = function () {
        if (i<tex.length) {
                pole.htmlText = tex.substring(0, i)+"_";
                i+=3;
        }else{
                pole.htmlText = tex;
        }
}

Вроде все нормально, скажете вы. Но заметьте, что даже когда текст будет полностью в поле pole, то onEnterFrame все еще будет работать, загружая ролик. Он будет снова и снова проверять все но приходить к тому самому else.
Несколько таки onEnterFrame и ролик начинает тормозить. Возможно ли как-нибудь сломать именно этот if, не удаляя и не останавливая данного onEnterFrame? Просто кроме печатания текста в этом перехватчике еще несколько событий, которые как раз и должны постоянно работать. Каким образом удалить все лишнее?
Я знаю команду delete this.onEnterFrame - НО тогда нельзя будет этот onEnterFrame восстановить для этого кадра\мува.
What's need to be done?

iNils 19.01.2007 11:16

Такой выод будет сильно зависить от fps ролика. Лучше вызывать через setInterval, а после окончания набивки его удалять.

etc 19.01.2007 11:26

Minastis, а что мешает повесить на onEnterFrame иную функцию?

MINASTIS 19.01.2007 12:39

iNils Просто у меня там перехватчик событий нажатия двух кнопок, для скроллинга. Вот полный код кадра. Разве setinterval может сделать что-то вроде (где перехв. события кнопок):
Код:

var xmlvar;
xmlvar = xmlvar.firstChild.firstChild.nextSibling;
var i:Number = 0;
var tex:String = "";
var mel:String = "";
var up:Boolean = false;
var down:Boolean = false;
pole.html = true;
while (xmlvar.firstChild.nodeValue != undefined) {
tex+="<b><font color='#F7FFD5'>Added:</font></b>"+xmlvar.attributes.name+"\n";
tex+="<b><font color='#F7FFD5'>Date:</font></b>"+xmlvar.attributes.date+"\n";
tex+=xmlvar.firstChild.nodeValue;
tex+="<hr>";
xmlvar = xmlvar.nextSibling.nextSibling;
}
this.onEnterFrame = function () {
        if (up==true) {
                pole.scroll -= 1;
        }
        if (down==true) {
                pole.scroll += 1;
        }
        if (i<tex.length) {
                pole.htmlText = tex.substring(0, i)+"_";
                i+=3;
        }else{
                pole.htmlText = tex;
                break;
        }
}
b1.onPress = function () {
        up = true;
}
b1.onRelease = function () {
        up = false;
}
b2.onPress = function () {
        down = true;
}
b2.onRelease = function () {
        down = false;
}
b1.useHandCursor = false;
b2.useHandCursor = false;
stop();

И вот когда до конца напечатается текст, скроллинг выполняется медленно, я бы даже сказал тормозя. Причем другие ролики на этой же странице тоже начинают притормаживать (анимация в основном).

__etc если я не ошибаюсь ты имеешь ввиду или while или еще что? А потом убрать break-om?

Kikasso 19.01.2007 12:57

В нужный момент можно сказать
Код:

this.onEnterFrame = null;
или
Код:

delete this.onEnterFrame;
а break там вообще не при делах, он за другое отвечает.

upd: про delete вы знаете, прочитал.
Можно сделать так:

Код:

function oef():Void{ // ваш код }

onEnterFrame = oef; //анимация пошла
onEnterFrame = null; //остановилась
onEnterFrame = oef; //снова пошла


etc 19.01.2007 14:27

Цитата:

Сообщение от MINASTIS
__etc если я не ошибаюсь ты имеешь ввиду или while или еще что? А потом убрать break-om?

Даже не знаю, по каким критериям ты прицепил сюда while и break.

Код:

i = 0;
test1 = function() {
  trace('test1()');
  i++;
  if (i>20) {
      onEnterFrame = test2;
  }
}
test2 = function() {
    trace('test2()');
    i--;
    if (i<=0) {
        delete onEnterFrame;
    }
}
onEnterFrame = test1;


MINASTIS 19.01.2007 17:13

Спасибо, вы меня просвятили своими знаниями. Просто после долгого воздержания работы с Flash-em у меня маленькое непонимание появилось.

MINASTIS 20.01.2007 13:20

Я снова пришел за советом, сенсеи. К сожелению, почему-то не получилось. Получилось, но отчасти =(
У меня текст печатается а после кнопки скролл делать отказываются... =(
Подскажите пожалуйста в чем проблема.
Код:

var xmlvar;
xmlvar = xmlvar.firstChild.firstChild.nextSibling;
var i:Number = 0;
var tex:String = "";
var mel:String = "";
var up:Boolean = false;
var down:Boolean = false;
pole.html = true;
while (xmlvar.firstChild.nodeValue != undefined) {
        tex += "<b><font color='#F7FFD5'>Added:</font></b>"+xmlvar.attributes.name+"\n";
        tex += "<b><font color='#F7FFD5'>Date:</font></b>"+xmlvar.attributes.date+"\n";
        tex += xmlvar.firstChild.nodeValue;
        tex += "<hr>";
        xmlvar = xmlvar.nextSibling.nextSibling;
}
loadtext = function () {
        if (up == true) {
                pole.scroll -= 1;
        }
        if (down == true) {
                pole.scroll += 1;
        }
        if (i<tex.length) {
                pole.htmlText = tex.substring(0, i)+"_";
                i += 3;
        } else {
                this.onEnterFrame = but;
                pole.htmlText = tex;
        }
};
but = function () {
        b1.onPress = function() {
                up = true;
        };
        b1.onRelease = function() {
                up = false;
        };
        b2.onPress = function() {
                down = true;
        };
        b2.onRelease = function() {
                down = false;
        };
};
this.onEnterFrame = loadtext;
b1.useHandCursor = false;
b2.useHandCursor = false;
stop();


etc 20.01.2007 13:48

MINASTIS, первые две строки твоего кода что, по-твоему, должны сделать?
То, что ты написал var xmlvar; объявляет переменную со значением undefined, далее ты хочешь xmlvar = undefined.firstChild.firstChild.nextSibling, естесственно опять получаешь undefined. Т.е. далее твой while уже не работает. Как у тебя там чего-то печатается, мне непонятно.

MINASTIS 20.01.2007 14:37

__etc эта странная система работает успешно уже несколько месяцев и на нескольких моих сайтах =).
А, понял что ты имеешь ввиду. У меня на предыдущем кадре стоит:
Код:

var xmlvar = new XML();
xmlvar.load("news.dat");
xmlvar.onLoad = function (ok:Boolean) {
        if (ok) {
                play();
        }
}
stop();

А в этом я уже убрал
Код:

var xmlvar;
У меня почему-то
Код:

onEnterFrame = but;
не работает.


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

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