Форум 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)
-   -   Проблемы с Dynamic text (http://www.flasher.ru/forum/showthread.php?t=159240)

Kiparis 28.06.2011 22:11

Проблемы с 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);


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


dark256 29.06.2011 00:00

Приложите исходник. Лучше в 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
}


Kiparis 29.06.2011 01:56

Разобрался - вместо

Код 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

dark256 29.06.2011 12:11

Код 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;



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

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