PDA

Просмотр полной версии : Клик на картинке в галерее


mj_nooker
11.08.2009, 04:31
Привет!

В actionscript 2.0 внедрялся сам, без наставников, по докам и видео-урокам, поэтому некоторые моменты неясны )
на одном лейере лежит невидимый мувик с координатами (krug) и мувик-"полотно" с картинками (vah). В мувике vah создаются пустые мувики, в которых создаётся ещё один пустой мувик, в который нужно подгрузить картинку и повесить листенер для клика на картинке:

var kartinka_mc_ldr:MovieClipLoader = new MovieClipLoader();
var kartListener:Object = new Object();
kartListener.onRelease = function() {
trace("pressed!"); //на первых порах листенер должен хотя-бы сказать о нажатии на картинку
};
for (var numkart_y = 1; numkart_y<=15; numkart_y++) { //15 рядов
for (var numkart_x = 1; numkart_x<=15; numkart_x++) { //по 15 картинок
numkart=numkart_x+next_ryad; //Для индексации клипов от 1 до 225
kart_obj = "kart"+numkart+"_mc"; //клею текстовое имя мувика для удобства использования дальше
setProperty(kart_obj, _x, kart_mc_coord_x+500*shahm); //смещаю каждый мувик для картинки в "следующие координаты")
setProperty(kart_obj, _y, kart_mc_coord_y);
this.createEmptyMovieClip(kart_obj, this.getNextHighestDepth()); //создаю мувик в vah
kart_obj.createEmptyMovieClip("kartinka",this.getNextHighestDepth()); //создаю в нём ещё один мувик. ПО ВСЕЙ ВИДИМОСТИ - ТУТ СОБАКА, ИБО В ДЕБАГГЕРЕ НЕ ПОКАЗЫВАЕТ СОЗДАННЫХ ВЛОЖЕННЫХ МУВИКОВ.
setProperty(kartinka, _x, kart_mc_coord_x+500*shahm);
setProperty(kartinka, _y, kart_mc_coord_y);
if (numkart_tlimit > 5) {numkart_tlimit = 1;}; //не обращать внимания, временные вспомогательные переменные
kartinka_mc_ldr.loadClip("E:/party/kart/"+numkart_tlimit+".jpg", kartina); //загружаю во вложенный мувик картинку
kartinka.addListener(kartListener); //вешаю на картинку листнер
kart_mc_coord_x += KART_PRIROST_X;//увеличиваею для позиционирования по горизонтали следующей картины+20рх = 1020рх
} //numkart_x
kart_mc_coord_y += KART_PRIROST_Y;
next_ryad += 15;
kart_mc_coord_x=start_coord_x; //сбрасываю счётчик координат Х до начального значения и таким образом перехожу на начало следующей строки для размещения следующего ряда мувиков
if (shahm == 0) {shahm = 1;} //если предыдущий ряд был выставлен без отступа, то следующий ряд будет с отступом
else {shahm = 0;}
}

далее, при клике на любую картинку на полотне, она должна смещать координаты полотна до координат krug (проще - выезжать кликнутую картинку на центр ). алгоритм выезда я ещё не разрабатывал, зациклился на создании мувика.

а теперь, собсно, вопрос: пожалуйста, подскажите, что я делаю не так, ибо вложенные мувики kartinka не создаются. в дальнейшем, при работающем коде должен создаваться
ещё один (некликабельный) мувик с рамкой (дублироваться мувик с рамкой из библиотеки).
прошерстил ветку форума, но подходящих топиков не нашёл (
5й день сижу, логика уже сварилась, помогите, плз )

psyh
11.08.2009, 05:43
Возьми какой нить пример галерее, и от туда возьми кусок нужного кода, я так делал по крайней мере когда мне нужна была такая фишка)))

udaaff
11.08.2009, 12:46
Половина переменных не задана, и еще хотите, чтобы у вас что-то работало: next_ryad = NaN, поэтому, все вычисления с этой переменной далее будут неверными. Какой тип имеет kart_obj? Строковый, по всей видимости, раз вы туда строку записали, а в коменте написано, что это мувиклип. Затем вы пытаетесь вызывать kart_obj.createEmptyMovieClip(). Затем пытаетесь обратиться к мнимому мувику "kartinka" через kartinka.. хотя он должен быть вложен в мнимый мувик kart_obj, вместо которого строка. Далее, пытаетесь загрузить черезе один и тот же экземпляр MovieClipLoader изображение в несуществующий мувик kartina, наивно полагая, что загрузка происходит моментально. После этого, пытаетесь вызывать kartinka.addListener -- у класса MovieClip нету такого метода.
Безумие сплошное, в общем.

mj_nooker
11.08.2009, 15:20
спасибо!

упс
я просил обратить внимание на код создания вложенных мувиков, и ввиду этого опустил описания переменных
сейчас скопирую весь код целиком (с учётом указанных ошибок)

Добавлено через 4 минуты
var kartinka_mc_ldr:MovieClipLoader = new MovieClipLoader();
KART_PRIROST_X = 1150; //расстояние между центрами картинок по Х
KART_PRIROST_Y = 900; //расстояние медлу центрами картинок по У
var kart_mc_coord_x:Number, kart_mc_coord_y:Number, next_ryad:Number = 0;
start_coord_x=-9225; //задаю начальные координаты для размещения мувика
start_coord_y=-6892;
var kart_obj:Object, numkart_tlimit=1; //numkart_tlimit ВРЕМЕННО !!! использую пока всего 5 фоток, чтоб не тратить время на ресайзы остальных.
kart_mc_coord_x=start_coord_x; //начальные координаты, координаты центра первой располагаемой картины
kart_mc_coord_y=start_coord_y;
shahm=0; //первая строка - не в шахматном, а в нормальном порядке
var kartListener:Object = new Object();
kartListener.onRelease = function() {
trace("pressed!"); //на первых порах листенер должен хотя-бы сказать о нажатии на картинку
};
for (var numkart_y = 1; numkart_y<=15; numkart_y++) { //15 рядов
for (var numkart_x = 1; numkart_x<=15; numkart_x++) { //по 15 картинок
numkart=numkart_x+next_ryad; //Для индексации клипов от 1 до 225
kart_obj = "kart"+numkart+"_mc"; //клею текстовое имя мувика для удобства использования дальше
setProperty(kart_obj, _x, kart_mc_coord_x+500*shahm); //смещаю каждый мувик для картинки в "следующие координаты")
setProperty(kart_obj, _y, kart_mc_coord_y);
this.createEmptyMovieClip(kart_obj, this.getNextHighestDepth()); //создаю мувик в vah
kart_obj.createEmptyMovieClip("kartinka",this.getNextHighestDepth()); //создаю в нём ещё один мувик. ПО ВСЕЙ ВИДИМОСТИ - ТУТ СОБАКА, ИБО В ДЕБАГГЕРЕ НЕ ПОКАЗЫВАЕТ СОЗДАННЫХ ВЛОЖЕННЫХ МУВИКОВ.
setProperty(kartinka, _x, kart_mc_coord_x+500*shahm);
setProperty(kartinka, _y, kart_mc_coord_y);
if (numkart_tlimit > 5) {numkart_tlimit = 1;}; //не обращать внимания, временные вспомогательные переменные
kartinka_mc_ldr.loadClip("E:/party/kart/"+numkart_tlimit+".jpg", kartina); //загружаю во вложенный мувик картинку
kartinka.addListener(kartListener); //вешаю на картинку листнер
kart_mc_coord_x += KART_PRIROST_X;//увеличиваею для позиционирования по горизонтали следующей картины+20рх = 1020рх
} //numkart_x
kart_mc_coord_y += KART_PRIROST_Y;
next_ryad += 15;
kart_mc_coord_x=start_coord_x; //сбрасываю счётчик координат Х до начального значения и таким образом перехожу на начало следующей строки для размещения следующего ряда мувиков
if (shahm == 0) {shahm = 1;} //если предыдущий ряд был выставлен без отступа, то следующий ряд будет с отступом
else {shahm = 0;}
}

udaaff
11.08.2009, 16:23
for (var i:Number = 0; i < 10; i++)
{
var y:Number = i * 20;
for (var j:Number = 0; j < 10; j++)
{
var cell:MovieClip = createEmptyMovieClip("cell" + i + j, getNextHighestDepth());
cell._x = j * 20;
cell._y = y;
cell.onRelease = cell_onReleaseHandler;

var image:MovieClip = cell.createEmptyMovieClip("image", getNextHighestDepth());
image.loadMovie("add.png");
}
}

function cell_onReleaseHandler():Void
{
trace(this);
}

mj_nooker
12.08.2009, 01:56
2udaaff
спасибо! - идею понял, адаптировал под свою задачу, мувики грузятся, мало того - кликаются! :)

НО
полотно с картинками у меня плавало по экрану (ибо там картинок у меня много, и чтоб все обозреть - нужно поездить по экрану)
это реализовано у меня путём кнопок с _alpha=0; экран разбит на области-кнопки, при наведении мышки на которую кнопка срабатывает onRollOver и двигает полотно в определённое направление.
Так вот - когда мышка rollOver Над картинкой - обработчик rollOver картинки перехватывает rollOver управляющих кнопок-направлений (которые в лейере ниже полотна), таким образом, чтоб попасть rollOver на управляющие кнопки-направления, нужно убрать мышку с картинки, мало того, навести ТОЛЬКО на пространство между картинками.

И КАК СДЕЛАТЬ, ЧТОБ rollOver'ы работали и картинки и кнопок-направления - ума не приложу ((
help pls?