PDA

Просмотр полной версии : Загрузка изображений динамически


radiofanat
06.10.2008, 17:40
Вот код которым я пытаюсь загрузить динамически картинки из папки.

for (i=1; i<=10; i++){
a = "image_mc"+i;
this.createEmptyMovieClip(""+a, 9);
b= "main_img/"+i+".jpg";
this.a.loadMovie(""+b);
}


я новичок и буду рад любой помощи. Идея загрузить 10 картинок, не меняя кода а только картинки отображать другие 10 если надо будет

джонатан
06.10.2008, 19:27
Так а в чем вопрос то?
А зачем так? — this.a.loadMovie(""+b); Помоему так лучше:
this.a.loadMovie(b);
Да и глубина всевремя одна и та же задается. Так не будет работать. Надо так:
this.createEmptyMovieClip(a, i);
или this.createEmptyMovieClip(a, 9 + i);
И зачем вообще нужно писать ""+ ???

Короче!


for (var i=1; i<=10; i++) {
this.createEmptyMovieClip("image_mc" + i, i);
this["image_mc" + i].loadMovie("main_img/"+i+".jpg");
}


А вообще, loadMovie - отстой, используй лучше MovieClipLoader.

radiofanat
06.10.2008, 19:58
Не знаю если я правильно выразил свою мыслю. Попробую еще раз. Есть папка с 10 картинками, надо загрузить их в одну линию на растоянии скажем 10 пикселей.

Division
06.10.2008, 20:05
Ну так загрузи раз надо (: Что конкретно не получается?

radiofanat
06.10.2008, 20:12
я думал можно создать пустой клип загрузить картинку потом правее другой, загрузить вторую и так далее.

так



for (var i=1; i<=10; i++) {
this.createEmptyMovieClip("image_mc" + i, i);
this["image_mc" + i].loadMovie("main_img/"+i+".jpg");

}

показывает только последнюю картинку, тоесть он не создает 10 мувиклипов а каждый раз новый не сохраняя старый, если я правильно понял.

Division
06.10.2008, 20:20
Тяжело _x поменять у мувиков? (:

Wolsh
06.10.2008, 20:27
а теперь как Вы думаете?)))
Вам даже код дали, что еще-то? Как раздвинуть с пробелом в 10 пикселей?
Может Вы уже сами вопрос зададите, это не сайт знакомств, где излагают свои мечты.

radiofanat
06.10.2008, 20:45
а теперь как Вы думаете?)))
Вам даже код дали, что еще-то? Как раздвинуть с пробелом в 10 пикселей?
Может Вы уже сами вопрос зададите, это не сайт знакомств, где излагают свои мечты.
Код который мне дали выдает точно такой результат что и мой код. Вопрос в том что если так нельзя делать подскажите как.

radiofanat
06.10.2008, 20:48
Тяжело _x поменять у мувиков? (:
Да нет, вот код
for (var i=1; i<=10; i++) {
this.createEmptyMovieClip("image_mc" + i, i);
this["image_mc" + i].loadMovie("main_img/"+i+".jpg");
this["image_mc" + i]._x = +100
}

просто все равно показывет только одну картинку но уже правее

Division
06.10.2008, 20:51
Попробуй
this["image_mc" + i]._x = i*100

radiofanat
06.10.2008, 20:59
Заработало, спасибо. Дальше я уже разберусь.

Вот код для загрузки 12 кртинок в 2 ряда


for (var i=1; i<=6; i++) {
this.createEmptyMovieClip("image_mc" + i, i);
this["image_mc" + i].loadMovie("main_img/"+i+".jpg");
this["image_mc" + i]._y = 180;
this["image_mc" + i]._x = 12 + i*107
}

for (var i=7; i<=12; i++) {
this.createEmptyMovieClip("image_mc" + i, i);
this["image_mc" + i]._y = 288;
this["image_mc" + i].loadMovie("main_img/"+i+".jpg");
this["image_mc" + i]._x = 12+(i-6)*107;

}


если есть замечания или предложения по улучшению буду очень рад.

Да иеще например как достать эти клипы

image_mc1.onRollOut = function (){
}

не работает

Wolsh
07.10.2008, 00:59
Да, замечания конечно есть))
Во-первых, запомните навсегда, что есть такое понятие как переменная, хранящая ссылку на объект. В данном примере this["image_mc" + i] - это клип. При его создании можно завести временную переменную, которая внутри цикла будет указывать на этот клип. Вот так:
for (var i=1; i<=6; i++) {
var mc:MovieClip = this.createEmptyMovieClip("image_mc" + i, i);
mc.loadMovie("main_img/"+i+".jpg");
mc._y = 180;
mc._x = 12 + i*107;
mc.onRollOver = clipOver;
}При этом процессор не должен будет каждый раз разыскивать ваш клип по хитрому адресу, как сейчас, а читабельность кода изрядно улучшится.
Во-вторых, и не так существенно, но можно ведь обойтись и одним циклом.
Например, так:

var cols:Number = 7 // нужное количество столбцов
var hspace:Number = 10 // горизонтальный просвет между картинками
var vspace:Number = 10 // вертикальный просвет между картинками
var img_width:Number = 180 // ширина картинок
var img_height:Number = 107 // высота картинок
////
for (var i=1; i<=6; i++) {
var mc:MovieClip = this.createEmptyMovieClip("image_mc" + i, i);
mc.loadMovie("main_img/"+i+".jpg");
var horder:Number = (i+cols)%cols;
horder = horder==0 ? cols-1 : horder-1
var vorder:Number = Math.ceil(i/cols)-1;
mc._x = horder*(img_width + hspace);
mc._y = vorder*(img_height + vspace);
mc.onRollOver = clipOver;
}И забыл сказать, что обработчик кнопочных событий Вы сможете повесить только после загрузки изображения.
Как Вам уже правильно сказали, loadMovie нельзя использовать в таких случаях, когда с загружаемым изображением необходимо чтото сделать, т.е. практически никогда нельзя))))) Используют MovieClipLoader и все его замечательные события, позволяющие отслеживать процесс загрузки и ее окончание.

radiofanat
07.10.2008, 01:10
Спасибо, очень интересно. Но mc.onRollOver все равно не работает :( даже курсор при наведении не меняется.

Wolsh
07.10.2008, 01:13
Вы читаете быстрее чем я пишу)))
Нижний абзац плиз.

radiofanat
07.10.2008, 01:20
Понял, пошел читать про MovieClipLoader.

джонатан
07.10.2008, 14:25
Код который мне дали выдает точно такой результат что и мой код. Вопрос в том что если так нельзя делать подскажите как.
Он неможет выдавать тоже самое, т.к. в вашем коде пока работает цикл, каждый раз создается клип на одной и той же глубине!

radiofanat
07.10.2008, 14:57
Он неможет выдавать тоже самое, т.к. в вашем коде пока работает цикл, каждый раз создается клип на одной и той же глубине!Извините, имел ввиду что на экране то же самое.

Опять запутался.

может кто укажет что неправильно делаю

#include "mc_tween2.as"

for (var i=1; i<=6; i++) {
crmovie(i);
}

function crmovie(i){

var home:MovieClip = this;

var mc:MovieClip = home.createEmptyMovieClip("mainClip" +i, home.getNextHighestDepth());
mc._x = 64+ i * 107;
mc._y = 235;



var mcc:MovieClip = mc.createEmptyMovieClip("clip" +i, mc.getNextHighestDepth());
mcc._x = Stage.width/2;
mcc._y = Stage.height/2;

var mcl:MovieClipLoader = new MovieClipLoader;
var mclListen:Object = new Object
mcl.addListener(mclListen);

mclListen.onLoadInit = center;
mcl.loadClip("main_img/"+i+".jpg", mcc);

function center(target:MovieClip) {

target._x = -target._width/2;
target._y = -target._height/2;
}


mclListen.onLoadComplete = function(mcc:MovieClip) {

mcc.onRollOver = grow;
mcc.onRollOut = shrink;

}
}
function grow() {

this.scaleTo (109 , 0.3, "linear");


}

function shrink() {

this.scaleTo (100 , 0.3, "linear");
}

radiofanat
17.10.2008, 00:03
не получается scale от центра картинки.

Mur4ik
17.10.2008, 04:11
Все трансформации происходят относительно точки регистрации мувиклипа.
Точка регистрации мувиклипа должна быть в центре для такого случая.
Это либо при создании мувика указывать, либо перед скалированием контент внутри мувиклипа смещать вверх-влево на половину высоты и ширины мувиклипа соответсвенно.

NoCD
17.10.2008, 08:06
createEmptyMovieClip("box_pic", 0);
box=new Object()
box.path=box_pic
box_pic._x=50
box_pic._y=50
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<=5;j++) {
st++
box.path.createEmptyMovieClip("pic_box"+st, st);
box_name=box.path["pic_box"+st]
mcLoader.loadClip("img"+st+".jpg",box_name);

box_name._x=70*i
box_name._y=70*j
box_name._xscale=15
box_name._yscale=15}}

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

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

Вот так пойдёт?
правда без скале по центру

Wolsh
17.10.2008, 11:03
Про скейл по центру
http://flasher.ru/forum/showpost.php?p=764072&postcount=27