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

sy555 02.10.2009 04:24

Фотогалерея и рандом
 
Добрый день!.
Взялся тут написать шапку сайта.. в ней фотогалерея.
Идея -на главной сцене 3 мувиклипа , в них "random" подгружается "random" фотографии ,через xml.

Вопрос 1, может есть исходники уже с решенной похожей задачей?

Вопрос 2. Я написал свой вариант, он работает.. вот код:
Код AS1/AS2:

//инициализация переменных ( все в первом кадре ,в мувиклипе)
var timeout:Number = new Number();
var num_rand:Number = new Number();
var my_lv:LoadVars = new LoadVars();
var num_pic: Number = new Number();
var num_mov: Number = new Number();
var cur_num1: Number = new Number();
var cur_num2: Number = new Number();
var cur_num3: Number = new Number();
var intervalId:Number = new Number();
cur_num1=0;
cur_num2=1;
cur_num3=2;
timeout=100;
num_rand=0;
num_pic=0;
num_mov=0;
loads_var();
 
btn1.onPress = function() {
 setInterval(randImage, timeout);
}
 
function close_books() {
                trace("flag_books: ");
}
function loads_var() {
        my_lv.onData = function(src:Number) {
    if (src == undefined) {
        trace("Error loading content.");
        return;
    }
 info.text=(" "+src);
  timeout=src;
 
};
my_lv.load("photo.ini",my_lv,"GET");
 
}
 
 
//загрузка /обработка xml
function loadXML(loaded) {
        if (loaded) {
                xmlNode = this.firstChild;
                image = [];
                description = [];
                total = xmlNode.childNodes.length;
                for (i=0; i<total; i++) {
                        image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
                        description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
                        }
                firstImage();
                setInterval(randImage, timeout);  // запуск фото просмотра
        } else {
                content = "file not loaded!";
        }
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("images.xml");
/////////////////////////////////////
 
 
/////////////////////////////////////
p = 0;
 
// загрузка фотографий
this.onEnterFrame = function() {
        filesize = picture.getBytesTotal();
        filesize1 = picture1.getBytesTotal();
        filesize2 = picture2.getBytesTotal();
        loaded = picture.getBytesLoaded();
        preloader._visible = true;
        if (loaded != filesize) {
                preloader.preload_bar._xscale = 100*loaded/filesize;
        } else {
                preloader._visible = false;
                if (picture._alpha<100) {
                        picture._alpha += 2;
                }
                if (picture1._alpha<100) {
                        picture1._alpha += 2;
                }
                if (picture2._alpha<100) {
                        picture2._alpha += 2;
                }
 
        }
};
 
// Функция подгружает разные фото в разные муви-клипы  (Фото не повторяются)
function randImage() {
num_pic=rando();
num_mov=random(3);
        trace("num_pic: " + num_rand);
 
                if (loaded == filesize) {
                        if(num_mov==0)
                        {
                                if(num_pic!=cur_num1 & num_pic!=cur_num2 & num_pic!=cur_num3)
                                {
                                        picture._alpha = 0;
                                        //intervalId = setInterval(s,500);
 
                                        picture.loadMovie(image[num_pic], 1);
                                        cur_num1=num_pic;
                                }
                        }
                        else if(num_mov==1)
                        {
                                if(num_pic!=cur_num1 & num_pic!=cur_num2 & num_pic!=cur_num3)
                                {
                                        picture1._alpha = 0;
                        picture1.loadMovie(image[num_pic], 1);
                        cur_num2=num_pic;
                                }
 
                        }
                        else if(num_mov==2)
                        {
                                if(num_pic!=cur_num1 & num_pic!=cur_num2 & num_pic!=cur_num3)
                                {
                                        picture2._alpha = 0;
                        picture2.loadMovie(image[num_pic], 1);
                        cur_num3=num_pic;
                                }
 
                        }
                        desc_txt.text = description[num_rand];
                        //picture_num();
                }
 
}
 
//функция рандома, получение номер фотографии, отличный от предыдушего
function rando() {
trace("rando_star");
        while(num_rand==current_pos)
        {
 
        num_rand=random(total);
        trace("cur_pos "+current_pos);
        trace("num_rand "+num_rand);
        }
current_pos=num_rand;
return num_rand;
}
 
//функция , загрузки первых фотографий в мувиклипы
function firstImage() {
        if (loaded == filesize) {
                picture._alpha = 0;
                picture1._alpha = 0;
                picture2._alpha = 0;
                picture.loadMovie(image[0], 1);
                picture1.loadMovie(image[1], 1);
                picture2.loadMovie(image[2], 1);
                desc_txt.text = description[0];
                //picture_num();
        }
}

Все бы хорошо, но хотелось бы усовершенствовать.
1)Можно ли подгрузить все фотки сразу в буффер, а не делать это по мере их вызова, и как?
2)Как добавить эффект на исчезновение фотографии ,
Код AS1/AS2:

if(num_pic!=cur_num1 & num_pic!=cur_num2 & num_pic!=cur_num3)
                                {
                                        picture._alpha = 0; //вот это строчка, он просто делает прозрачным мувик, и потом поднимает alpha уже с новой фотографией.. Как сделать ,не резкий скачок, а затухание?

3)Правильно я использую setInterval ?, ибо переодически(причину не смог выяснить), при отладке в интернете, начинает гнать как сумасшедший, но по большей части работает стабильно..


Заранее спасибо за ответы,
буду благодарен любой критики.. Ибо хочу научиться писать красиво.

woland24 03.10.2009 17:14

Чтобы фотки загружались сразу а не по мере вызова зайди в библиотеку (F11) --> контекстное меню фотки --> Linkage -->> отмечаешь Export for ActionScript и Export in first frame.
по поводу затухания, сделай уменьшение альфа в цикле вызываемом в setInterval
например
Код AS1/AS2:

var int_ = setInterval (function ():Void { 
  if (picture._alpha >= 5){
      picture._alpha -= 5;
  } else {
      clearInterval(int_);
  }
},100);

Поигравшись с условием цикла и временем вызова функции можно настроить плавность и время затухания

sy555 03.10.2009 17:42

Спасибо.
только по поводу подгрузки фотографий, их в библиотеке нету, т.к. они подгружаются через xml -динамически..
Можно ли как-нибудь кодом подключить? что то типо.. загрузить все фотографии в xml в буффер флеша и массив.?


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

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