PDA

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


Shadow_1512
12.11.2009, 14:35
Добрый день!

Сразу хочу извиниться за возможные глупые строки, я только начинаю вникать в программирование на AS, все, что было мной сделано до этого - это карта Северо-Запада с возможностью кликнуть по региону и получить с сервера нужную информацию в зависимости от того, где был сделан клик.
Сейчас задача сложнее - создать фотогалерею. Ясно, что есть готовые решения и так далее, но надо вот сделать самим. Я не дизайнер, т.е. рисует статические сцены и создает объекты и слои - другой человек.

Человек вот этот создал два кадра - на первом preloader, который обозначает процесс загрузки изображений, на втором, собственно, сцена, на которой есть большое изображение и куча маленьких превьюшек снизу, по клику на которые вместо одного большого загружается большое другое:). Никаких особых примочек и эффектов...пока..

С preloader я справился. Данные о картинках хранятся на сервере в XML, который спокойно загружается, обрабатывается, получается список картинок, который надо загрузить, который я с божьей помощью, хелпа и этого форума тоже вполне удачно загружаю, поэтому прелоадер у меня вполне адекватно отображает состояние загрузки и все проходит как надо. Загружается последнее изображение, перепрыгиваем на кадр 2 и тут главная проблема:

маленькие картинки на этапе обработки надо бы сделать кнопками, как того хотел дизайнер. Т.е. он создал на сцене объект "кнопка", сделал ему два состояния и доволен. А что мне с этим делать? Да, я могу создать объект кнопка

function onmPicLoaded(evt:Event):void
{
preloader_panel.width = evt.target.currentWidth;
var frame_btn = new Frame_Button();
frame_btn.addChild(evt.target.contentData);
frame_btn.x = currentXButton;
frame_btn.y = currentYButton;
buttons.push(frame_btn);
currentXButton += 60;
//trace(evt.target.content);
}

тут описано, что я делаю, когда загружается маленькая картинка. Первая строчка - изменение состояния ползунка, во второй я создаю кнопку того класса, который нужен, чтобы кнопка выглядела и вела себя как хочет дизайнер, потом пытаюсь добавить в нее BitMap Data. Почитав немного разного, я понял, что у меня вряд ли что получится (компиляция говорила о том же), я преобразовал подобный объект в MovieClip. Теперь все хорошо, но теперь состояния кнопки уже не такие как хочет дизайнер, да и это вроде как не совсем кнопка.


function onComplete(evt:Event):void
{
gotoAndPlay(2);
for(var i = 0; i < buttons.length; i ++)
{
addChild(buttons[i]);
}
}


Данный метод вызывается, когда последняя картинка загружена. Я прыгаю на второй кадр и пытаюсь добавить все свои кнопки на сцену. Ну тут тоже все плохо, потому что по замыслу, я их должен добавить не просто на сцену а на какой-то слой какого-то объекта. Вот это мне пока совсем не ясно.

Много написал, каков же вопрос:

1. Правильно ли я понимаю, что если я хочу загрузить изображение в некий объект на сцене, то он не может быть типа кнопка, а если может, то как это сделать?

2. Как реализовать добавление дочернего объекта к определенному объекту сцены в определенный его слой?

Заранее спасибо.

Gaen
13.11.2009, 00:38
1. У кнопок своя кривая внутренняя структура, поэтому лучше пользоваться мувиклипами либо спрайтами. Можно засунуть внутрь что угодно и задать реагирование на мышь (читайте EventDispatcher.addEventListener, MouseEvent.MOUSE_OVER, MouseEvent.MOUSE_OUT, MouseEvent.CLICK, Sprite.buttonMode.)

2. Вам нужно добавить объект не в определённый слой, а либо над либо под другим определённым объектом. Понятие слоёв существует только когда вы руками во флэше расставляете объекты на сцене. А во время исполнения каждый объект имеет свою уникальную глубину внутри родительского контейнера, если выражаться яснее, 1 объект - 1 слой. Весь функционал по добавлению, удалению и перетасовке реализован в классе DisplayObjectContainer.