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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.06.2011, 22:11
Kiparis вне форума Посмотреть профиль Отправить личное сообщение для Kiparis Найти все сообщения от Kiparis
  № 1  
Ответить с цитированием
Kiparis

Регистрация: Jun 2011
Сообщений: 2
Question Проблемы с Dynamic text

Приветствую всех!

Итак суть проблемы: Есть код ниже(честно взятый из словаря AS2 в качестве примера загрузки изображений), мне необходимо было добавить полосу загрузки к клипу. Полоса вынесена в отдельный клип в библиотеке, в клипе 3 слоя: Dynamic text(loader_txt), клип с полосой(lin), рамка. Клип имеет linkage: loader. Проблема состоит в том, что после выполнения(а оно выполняется, проверял) removeMovieClip(_root.load1); Dynamic text по каким то причинам не удаляется(load1 удаляется) и спустя какое то время(примерно минута) вдруг появляется во всей красе поверх картинки.ЛоадБар нужно именно присоединить(приаттачить) к клипу, другие варианты не нужны.Картинка грузится, все трейсы работают.Так почему текстовое поле не удаляется?(добавленный код выделен).

Код AS1/AS2:
// первый набор listener'ов
var my_mcl:MovieClipLoader = new MovieClipLoader();
var myListener:Object = new Object();
myListener.onLoadStart = function(target_mc:MovieClip)
{
	trace("*********First my_mcl instance*********");
	trace("Your load has begun on movie clip = " + target_mc);
	var loadProgress:Object = my_mcl.getProgress(target_mc);
	trace(loadProgress.bytesLoaded + " = bytes loaded at start");
	trace(loadProgress.bytesTotal + " = bytes total at start");
};
myListener.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number)
{
/*---------------------------------------------------------------------------------*/
	_root.attachMovie("loader","load1",100,{_x:315, _y:151});//присоединяем бар
	_root.load1.lin._width = 139 * (loadedBytes / totalBytes);//меняем ширину плосы
	_root.load1.loader_txt.text = (loadedBytes / totalBytes * 100) + "%";//выводим процент загрузки в поле
/*---------------------------------------------------------------------------------*/
	trace("*********First my_mcl instance Progress*********");
	trace("onLoadProgress() called back on movie clip " + target_mc);
	trace(loadedBytes + " = bytes loaded at progress callback");
	trace(totalBytes + " = bytes total at progress callback");
	trace(_root.load1.lin._width);
};
myListener.onLoadComplete = function(target_mc:MovieClip)
{
	trace("*********First my_mcl instance*********");
	trace("Your load is done on movie clip = " + target_mc);
	var loadProgress:Object = my_mcl.getProgress(target_mc);
	trace(loadProgress.bytesLoaded + " = bytes loaded at end");
	trace(loadProgress.bytesTotal + " = bytes total at end");
/*---------------------------------------------------------------------------------*/
	_root.onEnterFrame = function()
	{
		if (_root.load1._alpha != 0)
		{
			_root.load1._alpha -= 10;
		}
 
		if (_root.load1._alpha == 0)
		{
			removeMovieClip(_root.load1);
		}
	};
/*---------------------------------------------------------------------------------*/
};
myListener.onLoadInit = function(target_mc:MovieClip)
{
	trace("*********First my_mcl instance*********");
	trace("Movie clip = " + target_mc + " is now initialized");
	// теперь можно применять любые установки, например:
	//target_mc._alpha = 0;
};
myListener.onLoadError = function(target_mc:MovieClip, errorCode:String)
{
	trace("*********First my_mcl instance*********");
	trace("ERROR CODE = " + errorCode);
	trace("Your load failed on movie clip = " + target_mc + "\n");
};
my_mcl.addListener(myListener);
// загрузим файлы по назначению.
// загружаем в мувиклип
this.createEmptyMovieClip("clip1_mc",this.getNextHighestDepth());
/*---------------------------------------------------------------------------------*/
clip1_mc._x = 0;
my_mcl.loadClip("holl1.jpg",clip1_mc);

/*---------------------------------------------------------------------------------*/

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

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Приложите исходник. Лучше в CS3

Код AS1/AS2:
myListener.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number)
{
/*---------------------------------------------------------------------------------*/
	_root.attachMovie("loader","load1",100,{_x:315, _y:151});//присоединяем бар
onLoadProgress - срабатывает постоянно, весь период загрузки. Соотв. вы аттачите много много раз свой клип с лоадером.
На одну и ту же глубину и под одним и тем же именем. Что там в какой момент куда и как у вас удаляется - сказать сложно.

Вынесите эту строчку.

Так же:

Код AS1/AS2:
	_root.onEnterFrame = function()
	{
		if (_root.load1._alpha != 0)
Для красоты и удобства onEnterFrame имеет смысл вешать не на руут, а на сам клип.

Код AS1/AS2:
_root.load1.onEnterFrame = function()
{
           if ( this._alpha != 0)
           etc
}
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2


Последний раз редактировалось dark256; 29.06.2011 в 00:04.
Старый 29.06.2011, 01:56
Kiparis вне форума Посмотреть профиль Отправить личное сообщение для Kiparis Найти все сообщения от Kiparis
  № 3  
Ответить с цитированием
Kiparis

Регистрация: Jun 2011
Сообщений: 2
Разобрался - вместо

Код AS1/AS2:
_root.onEnterFrame = function()
	{
		if (_root.load1._alpha != 0)
		{
			_root.load1._alpha -= 10;
		}
 
		if (_root.load1._alpha == 0)
		{
			removeMovieClip(_root.load1);
		}
	};
надо

Код AS1/AS2:
_root.load1.onEnterFrame = function()
	{
		if (_root.load1._alpha > 0)
		{
			_root.load1._alpha -= 10;
		}
 
		if (_root.load1._alpha <= 0)
		{
			_root.load1.removeMovieClip();
		}
	};
+вынести аттач в onLoadStart

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

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Код AS1/AS2:
_root.load1.onEnterFrame = function()
	{
		if (_root.load1._alpha > 0)
Так как при такой записи функция расположена "внутри" load1, является его методом, то при обращении к load1, который собссно владелец данного метода, необязательно явно указывать его имя.
Используйте префикс "this"

Соотв. пишем так:

Код AS1/AS2:
if ( this._alpha > 0)
...
this.removeMovieClip();
Это и удобнее и корректнее.
И не забудьте после выполнения условия сделать

Код AS1/AS2:
delete this.onEnterFrame;
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

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

Теги
dynamic text , MovieClipLoader() , загрузка
Опции темы
Опции просмотра

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

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


 


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


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