PDA

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


Arkadiy
28.05.2011, 17:19
Уважаемые формчане, спасибо за внимание,
прошу сразу не кидать помидорами.
(Гугл шустрил, хелп читал, форум вплоть до 7 страницы поиска - перечитал).

У меня уже есть работающий проект, на подобие виртуальной экскурсии. Жмешь на стрелку - переходишь к Виду и т.д. Стрелки, ссылки и ссылки на фото Видов берутся из XML.
Так как вирт. экскурсия достаточно большая, фото Видов долго грузятся, задача сделать прелоадер сразу для всех Видов.

Проблемы две:

1) У меня есть голая болванка, в которую я подгружаю все элементы Вида, согласно ID.
Т.е. загрузить все фото во все Виды сразу - не получиться. Вопрос - я могу просто загрузить в какойто мувик все эти фото, а потом с кеша (если такое возможно) они будут уже быстро загружаться, хоть и ссылка на них будет всё еще из XML? Или же мне надо делать массив объектов хранящих фото и потом уже брать из массива?

2) Как в моем случае теоретически делается прелоадер?
Пробегаюсь циклом по всем видам и черз movieClipLoader, через listener и метод onLoadProgress поочередно гужу всё (куда)?


Пример XML (часть):
<views>
<view>
<url_id>1</url_id>
<pic_url>http://example.ru/upload/view/2011-05-22_18-44-46_1228936691.jpg</pic_url>
<arrows>
<arrow>
<id>0</id>
<title>Холл</title>
<url>1</url>
</arrow>
<arrow>
<id>2</id>
<title>Зеркальный шкаф в холле</title>
<url>2</url>
</arrow>
</arrows>
</view>
</views>


Пример Флеша:
function arrows(objeXML, var_projeID, view_pic) {
//
for (i=0; i<objeXML.childNodes.length; i++) {
if (objeXML.childNodes[i].childNodes[0].childNodes[0].nodeValue == var_projeID) {
// загрузка фоновой картинки первого вида VIEW
obje_win.obje_loadClip.loadMovie(objeXML.childNodes[i].childNodes[7].childNodes[view_pic].childNodes[1].childNodes[0].nodeValue);
//
var alphaTween:Tween = new Tween(obje_win, "_alpha", Regular.easeOut, 0, 100, 0.8, true);
//
//
for (j=0; j<objeXML.childNodes[i].childNodes[7].childNodes[view_pic].childNodes[2].childNodes.length; j++) {
var id = objeXML.childNodes[i].childNodes[7].childNodes[view_pic].childNodes[2].childNodes[j].childNodes[0].childNodes[0].nodeValue;
obje_win.arrows_clip["strelka"+id]._visible = true;
obje_win.arrows_clip["title"+id].text = objeXML.childNodes[i].childNodes[7].childNodes[view_pic].childNodes[2].childNodes[j].childNodes[1].childNodes[0].nodeValue;
obje_win.arrows_clip["strelka"+id].link = objeXML.childNodes[i].childNodes[7].childNodes[view_pic].childNodes[2].childNodes[j].childNodes[2].childNodes[0].nodeValue;
obje_win.arrows_clip["strelka"+id].onRelease = function() {
createObje(var_projeID, this.link-1);
};
}
}
}
}

Котяра
28.05.2011, 23:20
ужас.
используйте локальные переменные.
function arrows(objeXML, var_projeID, view_pic) {
var nodes:XMLNode = objeXML.childNodes;
var len:Number = nodes.length;
for (i = 0; i < len; i++) {

// projectType
var projectType:String = nodes[i].childNodes[0].childNodes[0].nodeValue
if ( projectType == var_projeID) {
//только название реально надо дать, я не знаю что это
var viewPicNode:XMLNode = nodes[i].childNodes[7].childNodes[view_pic]
// загрузка фоновой картинки первого вида VIEW
obje_win.obje_loadClip.loadMovie(viewPicNode.childNodes[1].childNodes[0].nodeValue);
//
var alphaTween:Tween = new Tween(obje_win, "_alpha", Regular.easeOut, 0, 100, 0.8, true);
//
//
var someNode:XMLNode = viewPicNode.childNodes[2].childNodes
for (j=0; j<someNode.length; j++) {
var id = someNode[j].childNodes[0].childNodes[0].nodeValue;
var strelka:MovieClip = obje_win.arrows_clip["strelka" + id];
strelka._visible = true;
obje_win.arrows_clip["title"+id].text = someNode[j].childNodes[1].childNodes[0].nodeValue;
strelka.link = someNode[j].childNodes[2].childNodes[0].nodeValue;
strelka.onRelease = function() {
createObje(var_projeID, this.link-1);
};
}
}
}
}
Это не только повысит читаемость, но и простоту рефакторинга, а некоторых случаях и производительность

Arkadiy
29.05.2011, 15:51
Спасибо. Учусь сам, поэтому как то так и выходит.

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

Arkadiy
02.06.2011, 15:54
Надеюсь это не противоречит правилам, но может кто то может помочь прикрутить прелоадер к моему творению, естественно не за бесплатно, обещаю полное содействие в этом. Ситуация близка к критической. Спасайте.

dark256
02.06.2011, 16:02
пишите в скайп.