PDA

Просмотр полной версии : Фотогалерея и рандом


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

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

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

//инициализация переменных ( все в первом кадре ,в мувиклипе)
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)Как добавить эффект на исчезновение фотографии ,

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
например

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

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

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