PDA

Просмотр полной версии : Картинки в ряд. Нужна помощь.


Orgy
16.09.2007, 16:43
Здравствуйте. Я только начинаю изучать FLASH и у меня возникла проблема. Помогите, пожалуйста решить ее.

Допустим, у меня есть картинки q1,q2,q3,q4,q5
Есть текстовое поле text_pole
Картинки нужно загрузить в ряд. А потом, при нажатии на определенную картинку в текстовом поле выводится текст "Вы нажали на N картинку".
Я написал такую вещь.


var myclip_name:Array = [];

for (i=1; i == 5; i++) {
myclip_name[i] = "clip"+i;
_root.createEmptyMovieClip (myclip_name[i], i+10);
_root.myclip_name[i]._x = i*100;
_root.myclip_name[i]._y = 20;
_root.myclip_name[i].loadMovie ("q"+i+".jpg");

_root.myclip_name[i].onRelease = function () {
_root.text_pole = "Вы нажали на "+i+" Картинку"
}
}


Но, к сожалению ничего не работает. Я очень плохо в этом разбираюсь. Наверное этот код покажется вам смешным и нелепым, но я уже ничего не могу поделать.
Подскажите, пожалуйста, как сделать правильно.
Заранее спасибо!

udaaff
16.09.2007, 17:14
var myclip_name:Array = [];
//
for (i=1; i<5; i++) {
_root.createEmptyMovieClip("clip"+i, i+10);
myclip_name[i] = _root["clip"+i];
_root["clip"+i]._x = i*100;
_root["clip"+i]._y = 20;
_root["clip"+i].loadMovie("q"+i+".jpg");
_root["clip"+i].onRelease = function() {
_root.text_pole.text = "Вы нажали на "+i+" Картинку";
};
}

Mnilionic
16.09.2007, 17:37
если картинки нужно ставить впритык друг к другу и при этом они имеют разную ширину, то сначала нужно загрузить все картинки, а потом циклом выстроить их в ряд сдвигая картинку по иксу на ширину предыдущей.

udaaff
16.09.2007, 18:00
Необязательно их все загружать сначала, а потом выстраивать, можно и в процессе:
x0 = 0;
for (i=0; i<5; i++) {
_root.createEmptyMovieClip("clip"+i, i+10);
_root["clip"+i].loadMovie("q"+i+".jpg");
_root["clip"+i]._x = x0;// лажанулся слегка
// загрузка асинхронна
x0 += _root["clip"+i]._width;
}

Но все равно можно и сразу их выстраивать: http://www.flasher.ru/forum/showpost.php?p=672398&postcount=13

Orgy
17.09.2007, 12:23
Не работает нажатие на Мувик. :(
Как же быть, чтоже делать?

Mnilionic
17.09.2007, 13:47
Добавь в библиотеку кнопку с идентификатором "btn" (её будем ставить поверх картинок)

var myclip_name:Array = [];
//
for (i=1; i<5; i++) {
var mc = this.createEmptyMovieClip("clip"+i, i+10);
myclip_name[i] = mc;
mc._x = i*100;
mc._y = 20;
var img = mc.createEmptyMovieClip("img", 0);
img.loadMovie("q"+i+".jpg");
var btn = mc.attachMovie("btn", "btn", 1);
btn.onRelease = function() {
_root.text_pole.text = "Вы нажали на "+i+" Картинку";
trace("Вы нажали на "+i+" Картинку")
};
}

udaaff
17.09.2007, 21:42
var myclip_name:Array = [];
//
for (i=1; i<5; i++) {
_root.createEmptyMovieClip("clip"+i, i+10);
myclip_name[i] = _root["clip"+i];
_root["clip"+i]._x = i*100;
_root["clip"+i]._y = 20;
_root["clip"+i].loadMovie("q"+i+".jpg");
_root["clip"+i].onRelease = function() {// сносится
_root.text_pole.text = "Вы нажали на "+i+" Картинку";
};
}
Действительно, этот вариант будет работать не так как ожидается, так как контейнером, после загрузки в него содержимого, наследуются только некоторые свойства (_x, _y, _xscale, _yscale, _rotation), т.е. onRelease сносится после загрузки, таким образом, можно или использовать вариант Mnilionic'а, или определять это событие после загрузки содержимого:
loader(0, 1);
//
function loader(x0:Number, i:Number):Void {
//
var container:MovieClip = this.createEmptyMovieClip("tester_mc"+i, this.getNextHighestDepth());
container._x = x0;
//
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
//
target_mc.onRelease = function() {
trace(this);
};
// --- рекурсия
loader(container._x+target_mc._width, ++i);
//
};
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
image_mcl.loadClip("image_"+i+".jpg", "tester_mc"+i);
}

Kikasso
17.09.2007, 22:17
..или повесить код на клип, внутри клипа создать еще пустой и грузить уже в него.

Mnilionic
18.09.2007, 00:11
Kikasso, точняг! что-то я сразу не сообразил

var myclip_name:Array = new Array();
//
for (i=1; i<5; i++) {
var mc = this.createEmptyMovieClip("clip"+i, i+10);
mc._x = i*100;
mc._y = 20;
var img = mc.createEmptyMovieClip("img", 0);
img.loadMovie("q"+i+".jpg");
mc.num = i;
mc.onRelease = function(){
trace("Вы нажали на "+this.num+" Картинку")
}
}