Форум 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)
-   -   Баги: Перекрытие и смещение картинок (http://www.flasher.ru/forum/showthread.php?t=123955)

mrMEM 16.04.2009 21:05

Баги: Перекрытие и смещение картинок
 
не закрывайте тему, пожалуйста. мол название не отражает смысла, в прошлый раз все отражало.

Голову себе сломал уже, не понимаю где ошибка. Проблема в том, что баги возникают в IE, в других браузерах все норм.

Я делаю сайт для фотостудии, подргужаю много картинок с помощью лоадера.

баг№1: в разделе смакуйте иногда появляется черный прямоугольник с прозрачностью 70% который перекрывает основные картинки
вот код:
Код AS1/AS2:

function loadSmack(){
        function loadByNumber(num:Number){
                //trace(num);
                var container:MovieClip = targetMC.createEmptyMovieClip("container"+num, targetMC.getNextHighestDepth());
                var photoLDR:mx.controls.Loader = container.createClassObject(mx.controls.Loader, num, container.getNextHighestDepth());
                container._alpha = 70;
                container.Num = num;
                photoLDR.setSize(1,1);
                photoLDR.scaleContent = false;
                photoLDR.autoLoad = true;
                photoLDR.contentPath = photo_array[num]["Small"];
 
                container.onPress = function(){
                        _global.rubric = "Смакуйте";
                        _global.open_photo = photo_array[this.Num]["Url"];
                        _global.rubricNumber = -1;
                        window.gotoAndStop("viewer");
                        window.viewerLoad();
                }
                container.onRollOver = function(){
                        this._alpha = 100;
                }
                container.onRollOut = function(){
                        this._alpha = 70;
                }
                // move Loader in correct place
                var listenerObject:Object = new Object();
                listenerObject.complete = function(eventObj:Object){
                        var photoLDR:mx.controls.Loader = eventObj.target;
                        var container:MovieClip = photoLDR._parent;
                        scaleing = SHORTCUT_HEIGHT/photoLDR._height*100;
                        container._xscale = scaleing;
                        container._yscale = scaleing;
                        //trace("_width:"+photoL._width+" _height:"+photoL._height+"    width:"+photoL.width+" height:"+photoL.height);
 
                        if (currentX+container._width >= (maxX)){
                                currentX=0;
                                currentY+=SPACE_BETWEEN_SHORTCUT+SHORTCUT_HEIGHT;
                        }
                        container._x = currentX;
                        container._y = currentY;
 
                        currentX+=container._width+SPACE_BETWEEN_SHORTCUT;
 
                        // load next picture
                        if ((num<photo_array.length) && (currentY<SHORTCUT_HEIGHT+SHORTCUT_HEIGHT+SPACE_BETWEEN_SHORTCUT)){
                                loadByNumber(num+1);
                        }
                }
                photoLDR.addEventListener("complete", listenerObject);
        }
 
        var targetMC:MovieClip = smack;
        var SHORTCUT_HEIGHT = 53;                // the height of small image in photo part
        var SPACE_BETWEEN_SHORTCUT = 5;        // space between images
        var photo_array:Array = _global.portfolio_array["Смакуйте"]["Images"];
 
        // local variables
        var currentX = 0;
        var maxX = targetMC._width;
        var currentY = 0;
        var maxY = targetMC._height;
        loadByNumber(0);
        targetMC.setMask(targetMC.area);
}

баг№2: время от времени смещаются фотографии во вьювере, туда можно попасть кликнув на фотку в блоке "смакуйте". та же ситуация с логотипом снизу. смещается вправо вниз.

баг№3: на главной странице (она появляется при загрузке). иногда перекрываются фотографии, гружу последовательно, так же использую лоадер.
код:
(эта функция вызывается с параметром 0)
Код AS1/AS2:

        function loadByNumber(num:Number){
                var photoLDR:mx.controls.Loader = targetMC.createClassObject(mx.controls.Loader, num, targetMC.getNextHighestDepth());
                photoLDR.scaleContent = false;
                photoLDR.autoLoad = true;
                photoLDR.contentPath = photo_array[num]["Small"];
                photoLDR.onPress = function(){
                        _global.rubric = rubric_array[this._name];
                        _global.open_photo = photo_array[this._name]["Url"];
                        _global.rubricNumber = rubric_number_array[this._name];
                        _root.cont.window.gotoAndPlay("viewer");
                }
 
                // move Loader in correct place
                var listenerObject:Object = new Object();
                listenerObject.complete = function(eventObj:Object){
                        var targetLDR:mx.controls.Loader = eventObj.target;
                        trace(num+" width:"+targetLDR.width+" path:"+photo_array[num]["Small"]);
                        targetLDR._x = currentX;
                        targetLDR._y = currentY;
                        if (targetLDR._width!=0){
                                currentX+=targetLDR._width+SPACE_BETWEEN_SHORTCUT;
 
                                if (currentX >= (maxX-targetLDR._width)){
                                        trace("перенос. curX:"+currentX+" photoLDR._width:"+targetLDR._width+" maxX"+maxX);
                                        currentX=0;
                                        currentY+=SPACE_BETWEEN_SHORTCUT+SHORTCUT_HEIGHT;
                                        targetLDR._x = currentX;
                                        targetLDR._y = currentY;
                                        currentX+=photoLDR._width+SPACE_BETWEEN_SHORTCUT;
                                }
                        }
                        else{
                                destroyObject(targetLDR);
                        }
                        //load next picture
                        if((num+1<photo_array.length)&&(currentY<SHORTCUT_HEIGHT*3+SPACE_BETWEEN_SHORTCUT*2)){
                                loadByNumber(num+1);
                        }
                }
                photoLDR.addEventListener("complete", listenerObject);
 
        }

есть предположения, что баги возникают только под вистой в IE, больше я их ни где не видел.
вот адрес сайта: http://harlemstudio.ru/
заранее спасибо за отклик

Добавлено через 56 минут
это еще не все.
иногда не срабатывает событие "complete". после вызова процедуры load("path..")

есть основания полагать, что лоадер не везде и не всегда работает корректно.

хм.. думаю о том, чтобы переписать все без Loadera, поэтому мнена заволновал вопрос,
будут ли картинки кэшироваться без него?! кэшируются флэшем или браузером?

mrMEM 19.04.2009 14:03

ок, спасибо.

на данный момент вижу решением отказаться от компонента Loader. Надеюсь услышать решение, которое можно быстрее воплотить. Сайт гарит.

Добавлено через 59 часов 17 минут
Избавился от бага переписав сайт, подгружая основные картинки через MovieClipLoader.

Считаю, что основные ошибки/баги возникали из-за того, что иногда Loader не вызывал событие complete. Некоторые смещения картинок - мой касяк.


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

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