PDA

Просмотр полной версии : вставить картику как переменную


GreeNoise
30.06.2003, 14:12
ЕСТЬ ФИЛЬМ , состоящий из нескольких сцен, все сцены построены по одному принципу, отличаются только используемыми картинками. Картинки на этих сценах одинакового размера и расположены на всех сценах в одном и том же месте.

Я ХОЧУ : весь фильм сократить до одной сцены, а символы вставлять скриптом как переменные.

НАПРИМЕР ТАК : все картинки у меня лежат в библиотеке как эталоны (symbol) и в нужный момент времени доставать их скрипитом, обращаясь по имени, и вставлять в нужное место.

ВОПРОС : Как мне указать куда именно надо вставлять картинку? И, если фильм у нас будет из одной сцены, как сделать, чтобы при следующем проходе (loop) вставлялась другая картинка?

Не слишком ли я намудрил?

Iv
30.06.2003, 14:15
не слишком намудрил.
- нужно аттачить картинку из библиотеки.
сделай пустой клип на сцене, в него аттачь на нулевую глубину.

или еще проще:
все картинки сделай мувиками положи в одно место на сцене, и просто делай всем визибл 0
а после этого нужной - визибл 1
и все

GreeNoise
30.06.2003, 14:26
Сэнкс!
Ok! Только я не совсем представляю как сделать, чтобы при следующем проходе (loop) вставлялась другая картинка?

Dimonius
30.06.2003, 14:30
Создай переменную в первом кадре, с инкриментом во втором Все картинки пронумеруй, лупись со второго кадра.

GreeNoise
30.06.2003, 15:10
Так. Хорошо, а если у меня должно быть несколько таких динамически-изменяемых объектов?

Например: imgLeft, imgCenter и imgRight

В библиотеке сложить их в разные папки и нумеровать их отдельно?

Dimonius
30.06.2003, 17:00
Как ты их уложишь в библиотеке - это твое дело, главное, что бы они заканчивались нужным номером, тогда ты сможешь обращаться к ним как
"imgLeft"+var
"imgCenter"+var
"imgRight" +var
где var та переменная, задающая номер итерации.

GreeNoise
01.07.2003, 18:16
чего-то нифига у меня не получается =(

мне надо :
у меня есть три набора мувиклипов, по четыре клипа в каждом наборе, все они названы imgLeft1, imgLeft2... imgRight1, imgRight2... imgCenter1, imgCenter2 ... и т.д.

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

могу я сделать так? :
в первый кадр самого верхнего слоя я пишу:

for (i=0; i<5; i++) {
"imgLeft"+i
"imgCenter"+i
"imgRight" +i
}

как я понимаю, после каждого прохода заначение i увеличивается на единицу, но как это сказать флешу, что он правильно меня понял?

Iv
01.07.2003, 21:13
я бы рекомендовал поступить иначе:
сделай три массива, а еще лучше xml-описание сцены и перезоди по xml, считывая их него данные о требуемых мувиках и их настройках.
ща пример сделаю и пришлю.

Sanik
01.07.2003, 21:26
Исходник лучше выложи...

Iv
01.07.2003, 21:37
зачем исходник?
посмотреть что у меня весь скрипт в руте в первом кадре?
и в библиотеке лежат два залинкованных мувика ball_mc и triangle_mc

// создаем XML описание (а можно и загрузить извне)
// по принципу: номер сцены указывается в ID узла сцены
// имя узла соответствует linkage имени мувика в библиотеке
str = "<scenes>";
str += "<scene id='1'>";
str += "<ball_mc _name='ball_mc' _x='20' _y='50' _alpha='50'/>";
str += "<triangle_mc _name='triangle_mc' _x='200' _y='100' _alpha='90'/>";
str += "<ball_mc _name='oval_mc' _x='20' _y='50' _xscale='50'/>";
str += "</scene>";
str += "<scene id='2'>";
str += "<ball_mc _name='ball_mc' _x='200' _y='150' _alpha='50'/>";
str += "<triangle_mc _name='triangle_mc' _x='20' _y='100' _alpha='90'/>";
str += "<ball_mc _name='oval_mc' _x='20' _y='50' _xscale='150'/>";
str += "</scene>";
str += "<scene id='3'>";
str += "<ball_mc _name='ball_mc' _x='20' _y='50' _alpha='50'/>";
str += "<triangle_mc _name='triangle_mc' _x='20' _y='100' _alpha='10'/>";
str += "<ball_mc _name='oval_mc' _x='20' _y='50' _xscale='30'/>";
str += "</scene>";
str += "</scenes>";
_root.scenes_xml = new XML(str);
// удаляем строку, она нам больше не нужна
delete str;
// создаем свойство scene в руте
_root.getScene = function() {
return _root.scene;
};
_root.setScene = function(num) {
var mc = _root.createEmptyMovieClip("holder_mc", 0);
var nod_array = _root.scenes_xml[num].childNodes, i = 0;
for (i; i<nod_array.length; i++) {
mc.attachMovie(nod_array[i].nodeName, "", i, nod_array[i].attributes);
}
};
_root.addProperty("scene", _root.getScene, _root.setScene);
// делаем тестовые аттачи
_root.onMouseUp = function() {
_root.scene++;
};


и все. все очень просто.

Sanik
01.07.2003, 22:20
Оригинал написал(а) BitSky
зачем исходник?

Да я не тебе, я GreeNoise'у! Шоб глянуть чего хотит... :)

Iv
01.07.2003, 22:28
ну извини

GreeNoise
02.07.2003, 12:39
САБЖ всем, кто помог!

Мне тут продложили вот такое решение: http://www.april5.de/gosha/bred.html (http://www.april5.de/gosha/bred.html)