Просмотр полной версии : Загрузка изображений динамически
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 поменять у мувиков? (:
а теперь как Вы думаете?)))
Вам даже код дали, что еще-то? Как раздвинуть с пробелом в 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 (){
}
не работает
Да, замечания конечно есть))
Во-первых, запомните навсегда, что есть такое понятие как переменная, хранящая ссылку на объект. В данном примере 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 все равно не работает :( даже курсор при наведении не меняется.
Вы читаете быстрее чем я пишу)))
Нижний абзац плиз.
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 от центра картинки.
Все трансформации происходят относительно точки регистрации мувиклипа.
Точка регистрации мувиклипа должна быть в центре для такого случая.
Это либо при создании мувика указывать, либо перед скалированием контент внутри мувиклипа смещать вверх-влево на половину высоты и ширины мувиклипа соответсвенно.
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)}}
Вот так пойдёт?
правда без скале по центру
Про скейл по центру
http://flasher.ru/forum/showpost.php?p=764072&postcount=27
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.