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

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

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

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Post 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?

Старый 19.01.2007, 11:16
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Такой выод будет сильно зависить от fps ролика. Лучше вызывать через setInterval, а после окончания набивки его удалять.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 19.01.2007, 11:26
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Minastis, а что мешает повесить на onEnterFrame иную функцию?

Старый 19.01.2007, 12:39
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 4  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
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?

Старый 19.01.2007, 14:27
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от 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;

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

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
В нужный момент можно сказать
Код:
this.onEnterFrame = null;
или
Код:
delete this.onEnterFrame;
а break там вообще не при делах, он за другое отвечает.

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

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

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


Последний раз редактировалось Kikasso; 19.01.2007 в 13:03.
Старый 19.01.2007, 17:13
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 7  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Спасибо, вы меня просвятили своими знаниями. Просто после долгого воздержания работы с Flash-em у меня маленькое непонимание появилось.

Старый 20.01.2007, 13:20
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 8  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Я снова пришел за советом, сенсеи. К сожелению, почему-то не получилось. Получилось, но отчасти =(
У меня текст печатается а после кнопки скролл делать отказываются... =(
Подскажите пожалуйста в чем проблема.
Код:
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();

Старый 20.01.2007, 13:48
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

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

Старый 20.01.2007, 14:37
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 10  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
__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:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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