PDA

Просмотр полной версии : рандомные картинки из XML


ambu
29.01.2009, 18:57
Привет,

Задача стоит такая:
Из XML файла подгружается картинка с описанием и линком. Нужно, чтобы рандомно менялись по 4 картинки.

Удалось добиться, чтобы подгружались картинки подряд.. например 2,3,4,5... а хочется, чтобы было 2,7,1,3 и без повторений.

Код рандома теперь таков:
function loadImages() {
var min = 0;
var max = total-3;
var p1 = min + Math.floor (Math.random() * (max));
var p2 = p1+1;
var p3 = p1+2;
var p4 = p1+3;
if (loaded == filesize) {
picture._alpha = 0;
picture.loadMovie(image[p1], 1);
desc_txt.text = description[p1];
btn = link[p1];
picture2._alpha = 0;
picture2.loadMovie(image[p2], 1);
desc_txt2.text = description[p2];
btn2 = link[p2];
picture3._alpha = 0;
picture3.loadMovie(image[p3], 1);
desc_txt3.text = description[p3];
btn3 = link[p3];
picture4._alpha = 0;
picture4.loadMovie(image[p4], 1);
desc_txt4.text = description[p4];
btn4 = link[p4];
}
}

код получился явно не через то место... и очень хочется его оптимизировать. Увы, я не программист ))

Чтобы картинки менялись после определённого количества времени сделал таким образом:
setInterval(function() {gotoAndPlay(1);}, 10000);

просто заставляя проигрывать мувиклип ещё раз.. это тоже явно не оптимальный вариант.

и прелодер явно тоже оптимизируется ))


Простите за грамматику.
Жду коментариев ))

Fatality
30.01.2009, 00:57
Вот код возвращающий 4 случайных значения из массива:
var arr:Array = ["a", "b", "c", "d", "e", "f", "g", "h", "j"];

function RandoMyCity(a:Array):Array
{
var arr1:Array = a.slice();
var arr2:Array = [];
for (i=0; i<4; i++)
{
arr2.push(arr1.splice(Math.random()*arr1.length, 1));
}
return arr2;
}

trace(RandoMyCity(arr));
просто заставляя проигрывать мувиклип ещё раз.. это тоже явно не оптимальный вариант.
нет, не оптимальный, лучше весь код поместить в функцию и вызывать эту функцию setTomeout-ом.

ambu
30.01.2009, 13:54
Не получаеться массив из XML передать этой функции :/

Fatality
30.01.2009, 18:16
А каким интересно образом вы пытаетесь его передать ?

ambu
30.01.2009, 19:11
есть переменная total, которая выдаёт общее количество записей в хмл.
Пытаюсь её разбить на составляющие 1, 2, 3 и т.п. .. потом перемешать и подставить место этого
var p1 = min + Math.floor (Math.random() * (max));
var p2 = p1+1;
var p3 = p1+2;
var p4 = p1+3;

времени потратил много.. но ничего не получилось

Добавлено через 2 минуты
кстати, спасибо за setTimeout. Стало значительно лутше и без глюков ))