PDA

Просмотр полной версии : Динамическая смена импортированной графики


Dimanoss
23.03.2007, 18:37
Пытаюсь малой кровью решить такую задачку:

Как оно должно выглядеть:
Галерея картинок (количество непостоянно), которые появляются снизу, плывут наверх и изчезают. (слева направо тоже можно) При наведении курсора на область с роликом движение прекращается, при клике на картинке открывается некоторый URL. Всё!

Как мне это видется технически:
Посредством PHP из базы MySQL вытаскиваются имена файлов и URLы (ID), где-то, видимо, складируются, и в виде переменных передаются в ролик. Там они через рандомайзер динамично подгружаются (плюс сами картинки) на определённые места... ммм как бы точнее.... скажем, картинок у меня десятка три, но на экране отображаются 8-9. Значит, если я правильно понимаю, плодить нужно не тридцать слоёв, а просто регулярно заменять "отработанные" картинки на новые.

В чём проблема:
PHP, MySQL и HTML для меня - куст родной. С XML-ем тоже смогу поладить. А вот Flash'ем занимался последний раз лет 5-6 назад, опыт ущербно-зачаточный. Т.е. если со скриптом хоть кое-как и смогу разобраться, то с самим принципом построения - исключительная задница.

О чём прошу всех гуру:
Если есть подобный проектик на примете, да ещё чтоб можно было в исходнички заглянуть, дайте знать, а? Или стандарное какое-то решение. Если же ничего такого нет, подтолкните к правильному решению, алгоритмиком каким попотчуйте... От какой печки вообще плясать?

Север
23.03.2007, 18:48
poni-nelegal.narod.ru
это для примера фотогалереи. (изначально грузится XML откуда все собссно и берется)

384-673-669 - стучись, всё объясню

Данный пример в приложении

Хотя пример плохой наверное. попробуй так:
в любом случае картинки будут иметь примерно такие имена
от pic1 до pic(итой)
кроме того можно использовать ссылки на клипы
Вот такой код к примеру


stop();
import flash.display.BitmapData;
var Count:Number=7;


for (var i:Number=1;i<=Count;i++) {
var t:MovieClip=this.createEmptyMovieClip("pic"+i, this.getNextHighestDepth()); // создаем указатель на созданный клип
var myBitmapData:BitmapData = new BitmapData(20, 20, false, 0xFF0000);
t.attachBitmap(myBitmapData, this.getNextHighestDepth());
t.text.text=i;// условно загружаем картинку
t._x = 20;
t._y = i*50;

t.onEnterFrame=function(){
this._y+=1;
if (this._y>364){
this._y=20;
}
}

t.onRollOver = function() {
// глобальная остановка
for (var i:Number=1;i<=Count;i++) {
_root["pic"+i].onEnterFrame=function() {};
}
// какое то событие 1
trace("Остановка картинок, мышка наведена на "+this+" картинку" );
}

t.onRollOut = function() {
// глобальная "поехали"
for (var i:Number=1;i<=Count;i++) {
_root["pic"+i].onEnterFrame=function() {
this._y+=1;
if (this._y>364){
this._y=20;
}
}
}
// какое то событие 2
trace("Картинки поехали, мышка убрана с "+this+" картинки" );
}

t.onPress=function(){
// какое то событие 3
trace("Загрузка картинки, мышка нажата на "+this+" картинку" );
}

}


Вместо простого цикла for используй обход XML дерева, а вместо

var myBitmapData:BitmapData = new BitmapData(20, 20, false, 0xFF0000);
t.attachBitmap(myBitmapData, this.getNextHighestDepth());


Используй внтурисозданный клип + загрузка в него картинки c урла полученного из XML дерева

Dimanoss
23.03.2007, 20:15
пример, кстати, отдалённо напоминает то, что нужно. Спасибо.

а вот имена картинок потому и приходится брать из базы, что никакой системы в них нет, всё максимально хаотично...

Север
23.03.2007, 20:20
Вы не поняли.
Имена клипов, в которые загружены ваши картинки, как раз будут структурированны, так как будут создаваться динамически в циклическом обходе вами созданного XML дерева.

Просмотрите у себя еще раз вот этот пример (просто кинть код на первом кадре

stop();
import flash.display.BitmapData;
var Count:Number=7;


for (var i:Number=1;i<=Count;i++) {
var t:MovieClip=this.createEmptyMovieClip("pic"+i, this.getNextHighestDepth()); // создаем указатель на созданный клип
var myBitmapData:BitmapData = new BitmapData(20, 20, false, 0xFF0000);
t.attachBitmap(myBitmapData, this.getNextHighestDepth());
t.text.text=i;// условно загружаем картинку
t._x = 20;
t._y = i*50;

t.onEnterFrame=function(){
this._y+=1;
if (this._y>364){
this._y=20;
}
}

t.onRollOver = function() {
// глобальная остановка
for (var i:Number=1;i<=Count;i++) {
_root["pic"+i].onEnterFrame=function() {};
}
// какое то событие 1
trace("Остановка картинок, мышка наведена на "+this+" картинку" );
}

t.onRollOut = function() {
// глобальная "поехали"
for (var i:Number=1;i<=Count;i++) {
_root["pic"+i].onEnterFrame=function() {
this._y+=1;
if (this._y>364){
this._y=20;
}
}
}
// какое то событие 2
trace("Картинки поехали, мышка убрана с "+this+" картинки" );
}

t.onPress=function(){
// какое то событие 3
trace("Загрузка картинки, мышка нажата на "+this+" картинку" );
}

}

Вместо простого цикла for используй обход XML дерева, а вместо


var myBitmapData:BitmapData = new BitmapData(20, 20, false, 0xFF0000);
t.attachBitmap(myBitmapData, this.getNextHighestDepth());

Используй внтурисозданный клип + загрузка в него картинки c урла полученного из XML дерева