Форум 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=87277)

repz 05.11.2006 03:33

2 Хемуль:
Вопрос открыт по прежнему, проблем с подгрузкой извне - нет, проблема в ссылке.

Хемуль 05.11.2006 03:36

2 repz:
Я постараюсь написать. Только сразу говорю, будет сложно... Наверное...

repz 05.11.2006 03:38

2 Хемуль:
Буду благодарен...

Хемуль 05.11.2006 20:18

Вложений: 3
Вот... Может не очень красиво...
Код:

var currentMovie:Number = 1;
var thumbsNumber:Number = 4;

var containerClipName:String = "container";
var containerLeft:Number = 20;
var containerTop:Number = 20;

var thumbsBaseName:String = "resources/pic";
var thumbsExtension:String = "jpg";
var thumbsClipBaseName:String = "thumb";
var thumbsLeft:Number = 0;
var thumbsTop:Number = 200;
var thumbsScale:Number = 50;
var thumbsInterval:Number = 10;

var bigsBaseName:String = "resources/big";
var bigsExtension:String = "jpg";
var bigLeft:Number = 0;
var bigTop:Number = 0;

var zoomedClipName:String = "zoomed";
var zoomedLeft:Number = 0;
var zoomedTop:Number = 0;
var zoomedScale:Number = 100;

var currentThumbX:Number = thumbsLeft;
var thumbsLoaded:Number = 0;
var thumbSelected:Number = 0;

var containerClip:MovieClip = this.createEmptyMovieClip(containerClipName, this.getNextHighestDepth());
containerClip._x = containerLeft;
containerClip._y = containerTop;

var clipsLoader:MovieClipLoader = new MovieClipLoader();
var clipsLoaderListener:Object = new Object();
clipsLoader.addListener(clipsLoaderListener);
loadNewMovie(currentMovie);

clipsLoaderListener.onLoadInit = function(targetClip:MovieClip)
{
        thumbsLoaded++;
        targetClip._xscale = targetClip._yscale = thumbsScale;
        currentThumbX += targetClip._width + thumbsInterval;
        targetClip.id = currentMovie;
        loadNextMovie();       
        targetClip.onRollOver = function()
        {
                this.setTransformRGBA(100, 110, 100, 0, -100, 0, 100, 0);
        };
        targetClip.onRollOut = targetClip.onReleaseOutside = function()
        {
                this.resetTransformRGBA();
        };
        targetClip.onRelease = function()
        {
                if (this._parent[zoomedClipName] != undefined)
                {
                        this._parent[zoomedClipName].removeMovieClip();
                }
                thumbSelected = this.id;
                var zoomedLoader:MovieClipLoader = new MovieClipLoader();
                var zoomedLoaderListener:Object = new Object();
                zoomedLoader.addListener(zoomedLoaderListener);
                var zoomedName:String = thumbsBaseName + this.id + "." + thumbsExtension;
                var zoomedContainerClip:MovieClip = this._parent.createEmptyMovieClip(zoomedClipName, this._parent.getNextHighestDepth());
                zoomedContainerClip._x = zoomedLeft;
                zoomedContainerClip._y = zoomedTop;
                zoomedLoader.loadClip(zoomedName, zoomedContainerClip);
                zoomedLoaderListener.onLoadInit = function(targetZoomedClip:MovieClip)
                {
                        targetZoomedClip.id = thumbSelected;
                        targetZoomedClip.onRelease = function()
                        {
                                if (thumbsLoaded == thumbsNumber)
                                {
                                        var parentClip:MovieClip = this._parent;
                                        for (thumbsIndex:Number = 1; thumbsIndex <= thumbsNumber; thumbsIndex++)
                                        {
                                                var thumbToDeleteName:String = thumbsClipBaseName + thumbsIndex;
                                                parentClip[thumbToDeleteName].removeMovieClip();
                                        }
                                        var bigLoader:MovieClipLoader = new MovieClipLoader();
                                        var bigName:String = bigsBaseName + this.id + "." + bigsExtension;
                                        this.removeMovieClip();                                       
                                        bigLoader.loadClip(bigName, parentClip);                                       
                                }
                        };
                        targetZoomedClip.onRollOver = function()
                        {
                                this.setTransformRGBA(100, 110, 100, 0, -100, 0, 100, 0);
                        };
                        targetZoomedClip.onRollOut = targetClip.onReleaseOutside = function()
                        {
                                this.resetTransformRGBA();
                        };                       
                };
        };
}

clipsLoaderListener.onLoadError = function(targetClip:MovieClip, errorCode:String)
{
        targetClip.removeMovieClip();
        loadNextMovie();
}

function loadNewMovie(movieNumber:Number)
{
        var movieName:String = thumbsBaseName + movieNumber + "." + thumbsExtension;
        var movieContainerClipName:String = thumbsClipBaseName + movieNumber;
        var movieContainerClip:MovieClip = containerClip.createEmptyMovieClip(movieContainerClipName, containerClip.getNextHighestDepth());
        movieContainerClip._x = currentThumbX;
        movieContainerClip._y =        thumbsTop;
        clipsLoader.loadClip(movieName, movieContainerClip);
}

function loadNextMovie()
{
        currentMovie++;
        if (currentMovie <= thumbsNumber)
        {
                loadNewMovie(currentMovie);
        }
}

MovieClip.prototype.setTransformRGBA = function (ra, rb, ga, gb, ba, bb, aa, ab)
{
        if (arguments.length < 8)
        {
                return false;
        }
        var x:Number = 0;
        while (x < arguments.length)
        {
                if (isNaN(arguments[x++]))
                {
                        return false;
                }
        }
        if (ra <= 100 && ga <= 100 && ba <= 100 && aa <= 100 && ra >= -100 && ga >= -100 && ba >= -100 && aa >= -100 && rb <= 255 && gb <= 255 && bb <= 255 && ab <= 255 && rb >= -255 && gb >= -255 && bb >= -255 && ab >= -255)
        {
                var thisColor:Object = {ra:ra, rb:rb, ga:ga, gb:gb, ba:ba, bb:bb, aa:aa, ab:ab};
                var col:Color = new Color(this);
                col.setTransform(thisColor);
                return true;
        }
        else
        {
                return false;
        }
}

MovieClip.prototype.resetTransformRGBA = function()
{
        var thisColor:Object = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa:100, ab:255};
        var col:Color = new Color(this);
        col.setTransform(thisColor);
}

Исходник прикрепляю...

repz 05.11.2006 23:36

2 Хемуль:
Я конечно уже наглею, но все же посмотри мой пример,я в AS так не рублю сильно у мя попроще немного...... может с моим можно , что-то сделать?

Хемуль 06.11.2006 00:13

2 repz:
Ой, извините, я не хочу разбираться в вашем коде. Я посмотрел, очень уж у вас всё просто. Я не говорю, что нужно обязательно моим путём идти, но и по-вашему нормально не получится... Смотрите, в чём проблема... Мы загружаем извне картинки на сцену и делаем из них маленькие такие сабнейлы... Для этого нужен один обьект MovieClipLoader... Потом нам нужно щёлкнуть на маленькую картинку и получить большую... duplicateMovieClip не пройдёт, потому что флешка была загружена извне. Поэтому придётся снова грузить ту же флешку, что и для маленькой картинки, но уже не уменьшать её. Если предположить, что пользователь может щёлкнуть на первом сабнейле, когда ещё не загружены все остальные, нам понадобится ещё один MovieClipLoader. Ну, мне так кажется... Потом, если предположить, что то же самое произойдёт с увеличенным мувиклипом (нажатие мышью на нём), то нам понадобится ещё один MovieClipLoader. Я вот точно не знаю, может ли MovieClipLoader параллельно загружать флешки в несколько клипов. Но даже если может, это всё равно не слишком сильно уменьшит код. Если не может, но вы захотите всё реализовать одним MovieClipLoader, то придётся вводить переменные-флаги и ограничивать пользователя в действиях, ожидая окончание загрузки...
Проще говоря, врядли получится нормально обойтись тем количеством строк, что у вас в коде...

repz 06.11.2006 00:16

2 Хемуль:
Спасибо за помощь, сделаю кнопки к каждой маленькой картинки....

Хемуль 06.11.2006 00:25

2 repz:
Кнопки? В смысле символы button в библиотеке? о_0
Вас что, действительно так сильно напугал мой код? Но ведь проще действительно врядли выйдет. У вас в задаче целых 3 последовательных загрузки извне... Сложно ожидать, что всё это будет так просто работать и займёт пару строк кода...

repz 06.11.2006 00:30

2 Хемуль:
В коде вроде разобрался, кое что осталось не понятным, лишнее удалил..., но у меня не три картинки, а 16 и их размещение вызывает у меня большие вопросы в смысле кода....
P.S. Нет просто под каждым полем с картинкой - мувик кнопка,который выгружает текущий мувик и на его место загружает другой.

Хемуль 06.11.2006 00:37

У меня в коде количество картинок, которые нужно загружать регулируется переменной thumbsNumber.
По поводу кнопки под полем с картинкой... Ну в обработчике zoomedLoaderListener.onLoadInit моего кода можно просто создать/загрузить кнопку и назначить для неё обработчик onRelease...


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

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