PDA

Просмотр полной версии : Динамическое создание мувиков и вызов конкретного на экран


sweet_fighter
18.01.2009, 15:00
Доброго времени суток.
Вкратце. Есть код, который грузит img(1,2...n).jpg картинки из папки, динамически создавая каждому отдельный мувиклип.



createEmptyMovieClip("box_pic", 0);
box=new Object()
box.path=box_pic
box_pic._x=-150
box_pic._y=-120
st=0
var listener:Object = new Object();
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(listener);
for(i=1;i<=5;i++)
{for(j=1;j<=3;j++) {
st++
box.path.createEmptyMovieClip("pic_box"+st, st);
box_name=box.path["pic_box"+st]
mcLoader.loadClip("img"+st+".jpg",box_name);
}}

listener.onLoadInit = function (mc:MovieClip) {
if(mc)
{init(mc)}}

function init(mc)
{mc.onPress=function()
{
trace(this)
};

}



он работает без проблем(взял тоже из форума), но я уже дня два бьюсь, никак не могу зделать что бы при нажатии мышки нужный мне мувик подгружал большую картинку, которая соответствует названию маленькой. img14 = big14. Trace при нажатии выдает все верно.

Я пытался просто в onPress создавать новый мувик "box_big" и там прописывать что-то вроде уже с big(1,2...n).jpg... но оно никак не хочет.


{mc.onPress=function()
{
createEmptyMovieClip("box_big", 0);
var mclLoader:MovieClipLoader = new MovieClipLoader();
var oListener:Object = new Object();
mclLoader.addListener(oListener);
mcLoader.loadClip("big"+st+".jpg",box_big);
oListener.onLoadInit = function(box_big:MovieClip) {
box_big._x=-189;
};
mclLoader.loadClip("big"+st+".jpg",box_big);
}


хелп плиз, а то убьюсь))) если нужно, исходник выложу...

KiL33
18.01.2009, 15:25
К примеру...

sweet_fighter
18.01.2009, 15:38
ммм... Спасибо =) C xml все проще...
image_mc.loadMovie(baseurl + this.IMAGE);

Но мне интирестно зделать без xml =)

Kuruki
18.01.2009, 15:48
во-первых, во время вызова функции
mcLoader.loadClip("big"+st+".jpg",box_big);
st уже не равен нужному вам значению. По идеи, если вы правильно указали куда грузить большую картинку, то сейчас у вас всегда грузится big15 (если я правильно посчитал), так?
Сохраняйте значение st в свойстве клипа
box_name=box.path["pic_box"+st]
box_name.id = st;

...

mcLoader.loadClip("big"+id+".jpg",box_big);
если это не поможет, то исходник выложите

sweet_fighter
18.01.2009, 16:37
Спасибо, зделал как Вы сказали, но все равно не отображает.
Да, big15 выводило в начале. Сейчас просто bigundefined...

Прикрепил исходник test_fla (Flash 8) без изображений.

вот тут с изображениями ~ 1.5mb
http://streem.com.ua/test.rar

sweet_fighter
20.01.2009, 20:37
день ушел на изучение динамических обьектов)))
помогите плиз)) никак не соображу что и куда)...

Kuruki
20.01.2009, 21:13
Странно... Почему-то после загрузки содержимого в клип его свойство id теряется..
Вообще, функции, вложенные в другие - это плохо. Сами в них разбирайтесь :) .
Могу предложить немного корявый вариант:
function init(mc) {
mc.onPress = function() {
var id:String = this._name.split("pic_box")[1];
...
mcLoader2.loadClip("big"+id+".jpg",box_big);
...
}

alexcon314
20.01.2009, 23:35
Попробуйте так:
this.createEmptyMovieClip("box_pic", 0);
box_pic._x = -150;
box_pic._y = -120;
var st:Number = 1;
var max_st:Number = 15;
function LoadBig_Pic() {
// глубину, на которую грузятся большие картинки можно сделать независимой переменной
var empty:MovieClip = box_pic.createEmptyMovieClip("big_box" + this.id, st++);
mcLoader.loadClip("big" + this.id + ".jpg", empty);
}
onLoadError = function (mc:MovieClip, errorCode:String, httpStatus:Number) {
trace("Loading error");
trace("errorCode: " + errorCode);
trace("httpStatus: " + httpStatus);
};
onLoadInit = function (mc:MovieClip) {
if (st > max_st) {
// здесь можно работать с большими картинками
return;
}
mc.id = st;
//mc._x =
//mc._y =
mc.onRelease = LoadBig_Pic;
st++;
var empty:MovieClip = box_pic.createEmptyMovieClip("pic_box" + st, st);
mcLoader.loadClip("img" + st + ".jpg", empty);
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip("img" + st + ".jpg", box_pic.createEmptyMovieClip("pic_box" + st, st));

... после загрузки содержимого в клип его свойство id теряется
Именно. Поэтому id и обработчик onRelease и прочее надо назначать после окончания загрузки содержимого в клип.

sweet_fighter
27.01.2009, 23:48
alexcon314, спасибо =) но оно грузит только 1 маленькую картинку =( а не 15...

alexcon314
28.01.2009, 08:40
Давайте посмотрим ваш исходник. И, да... досадная "очепятка" в моем примере, копипаст проклятый)), поправил. Попробуйте еще.

sweet_fighter
28.01.2009, 16:11
http://streem.com.ua/test_2.rar

вот мой =) там совместил свой и Ваш код

да, кст, попробывал то что Вы изменили) грузит все, но в одну точку :D

alexcon314
28.01.2009, 17:14
// размер сцены 900х600, смотрится хорошо
this.createEmptyMovieClip("box_pic", 0);
var st:Number = 1;
var max_st:Number = 12;
function remove() {
this.removeMovieClip();
}
function LoadBig_Pic() {
trace(this.id);
// глубину, на которую грузятся большие картинки можно сделать независимой переменной
var empty:MovieClip = box_pic.createEmptyMovieClip("big_box" + this.id, st++);
mcLoader.loadClip("big" + this.id + ".jpg", empty);
}
onLoadError = function (mc:MovieClip, errorCode:String, httpStatus:Number) {
trace("Loading error");
trace("errorCode: " + errorCode);
trace("httpStatus: " + httpStatus);
};
onLoadInit = function (mc:MovieClip) {
if (st > max_st) {
mc.onRelease = remove;
return;
}
mc.id = st;
mc._x = (st - 1) * 60;
mc._y = (st - 1) * 20;
mc.onRelease = LoadBig_Pic;
st++;
if (st > max_st) {
return;
}
var empty:MovieClip = box_pic.createEmptyMovieClip("pic_box" + st, st);
mcLoader.loadClip("img" + st + ".jpg", empty);
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip("img" + st + ".jpg", box_pic.createEmptyMovieClip("pic_box" + st, st));
Допилить самому никак :)?

sweet_fighter
28.01.2009, 17:39
Допилить самому никак :)?
я думал на этим предложением)))
и был в полной уверености, что
mc._x =
mc._y =
отвечают за весь мувик в целом, а не за каждый обьект)) протупил)...
пасиб огромное))