![]() |
|
||||||||||
|
|||||
|
Уважаемые гуру, помогите ещё раз пожалйста.
Хотелось бы сделать баннер программно из массива картинок Есть массив объектов, ести объект имеет поле "тип", равное "banner", то к объекту также прилепляется массив arr с именами картинок arr[u].b_name и временем зависания каждой картинки на экране arr[u].time. Не получается менять баннер через нужный промежуток, подскажите где ошибка. Мне или нужно сделать задержку в том цикле, который закоментарен, либо заставить работать функциию loop, она сейчас не работает. function PutObjects() {
_root.depth++;
for (q=0; q<_root.Objects.length; q++) {
var curr1:MovieClipLoader = new MovieClipLoader();
var curr:MovieClip = _root.createEmptyMovieClip("obj_"+q, _root.depth);
if (_root.Objects[q].type eq "banner") {
_root.depth++;
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
number = target_mc._name.split("_");
nu = Number(number[1]);
target_mc._alpha = _root.Objects[nu].alpha;
target_mc._x = _root.Objects[nu].x;
target_mc._y = _root.Objects[nu].y;
target_mc._width = _root.Objects[nu].w;
target_mc._height = _root.Objects[nu].h;
};
u = 0;
function loop() {
trace("u="+u);
if (u == _root.Objects[q].arr.length) {
clearInterval(l);
return;
}
u++;
curr1.loadClip(_root.Objects[q].arr[u].b_name, curr);
curr1.addListener(mclListener);
}
l=setInterval(this,"loop", 1000);
/*for (u=0; u<_root.Objects[q].arr.length; u++) {
curr1.loadClip(_root.Objects[q].arr[u].b_name, curr);
}
curr1.addListener(mclListener);
*/
}
}
}
|
|
|||||
|
Сделала с использование класса MC Tween , теперь у меня баннеры меняются, но так в цикле, это происходит один раз, то есть, если например в папке лежат 4 баннера, они меняются друг за другом, цикл останавоивается. Как начать выделенный цикл сначала?
if (_root.Objects[q].type eq "banner") {
_root.depth++;
curr._alpha = _root.Objects[q].alpha;
curr._x = _root.Objects[q].x;
curr._y = _root.Objects[q].y;
for (u=0; u<_root.Objects[q].arr.length; u++) {
var item:MovieClip = curr.createEmptyMovieClip("item_"+u, _root.depth);
item.loadMovie(_root.Objects[q].arr[u].b_name);
item._alpha = 0;
_root.depth++;
trace("item="+item);
}
_root.FLAG = false;
myCallBack = function () {
trace("ok, completed");
trace("u="+u);
};
for (u=0; u<_root.Objects[q].arr.length; u++) {
trace("delay "+_root.Objects[q].arr[u].time);
if ((u == 0) && (!_root.FLAG)) {
curr["item_"+u].tween("_alpha", 100, 0.1, "linear", undefined, myCallBack);
_root.FLAG = true;
}
if ((u == 0) && (FLAG)) {
curr["item_"+u].tween("_alpha", 100, 0.1, "linear", _root.Objects[q].arr[_root.Objects[q].arr.length-1].time, myCallBack);
_root.FLAG = true;
}
trace("u="+u);
//trace("_root.s "+_root.s);
curr["item_"+u].tween("_alpha", 100, 0.1, "linear", _root.Objects[q].arr[u-1].time, myCallBack);
_root.FLAG = true;
}
}
|
|
|||||
|
Квач
Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
|
2 Ulya:
Я бы не делал цикла вообще... Цикл предполагает выполнение каких-то действий до возникновения какого-то условия... Если у вас цикл бесконечный, то зачем он вообще нужен? Я бы просто сделал всё setInterval'ами... А вообще взгляните на прикрепление... Чем-то схоже с вашей задачей... Заметьте, я сделал это вообще без Твинов и циклов...
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого |
|
|||||
|
Хемуль, спасибо за пример, сделала вот так, работает, но со временем зависает, у меня есть подозрение, что скорей всего что-то где-то не удаляется, за полчаса флэха зависает полностью, подскадите где что нужно убивать?
function put(banners_arr, qq) {
curr = _root["obj_"+qq];
var curr1:MovieClipLoader = new MovieClipLoader();
trace(banners_arr);
var DISSOLVE_INTERVAL:Number = 10;
var PICTURES_NUMBER:Number = banners_arr.length;
var frameCounter:Number = 0;
var currentPicture:Number = 0;
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
trace("onLoadInit "+target_mc);
target_mc._x = _root.Objects[qq].x;
target_mc._y = _root.Objects[qq].y;
target_mc._width = _root.Objects[qq].w;
target_mc._height = _root.Objects[qq].h;
};
addPicture(currentPicture).frameCounter = DISSOLVE_INTERVAL;
function addPicture(pictureNum):MovieClip {
var newPicture = curr.createEmptyMovieClip("newPicture", this.getNextHighestDepth());
newPicture.frameCounter = 1;
newPicture.onEnterFrame = function() {
trace("on EnterFrame new Picture"+ this.frameCounter);
this.frameCounter++;
};
SHOW_INTERVAL = 31*banners_arr[pictureNum].time;
var newPictureName:String = banners_arr[pictureNum].b_name;
for (v in curr) {
curr1.unloadClip(curr[v]);
}
curr1.loadClip(newPictureName, newPicture);
curr1.addListener(mclListener);
newPicture.frameCounter = 1;
return newPicture;
}
curr.onEnterFrame = function() {
if (PICTURES_NUMBER<>1) {
if (frameCounter<=DISSOLVE_INTERVAL) {
trace("this "+this.newPicture);
this.newPicture._alpha = frameCounter*(100/DISSOLVE_INTERVAL);
}
if (frameCounter>SHOW_INTERVAL) {
for (v in this) {
this[v].removeMovieClip();
}
trace("теперь внутри");
for (v in this) {
trace("-"+this[v]);
}
currentPicture++;
if (currentPicture>PICTURES_NUMBER-1) {
currentPicture = 0;
}
trace("PICTURES_NUMBER "+PICTURES_NUMBER);
addPicture(currentPicture);
frameCounter = 1;
} else {
frameCounter++;
}
}
};
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 01:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|