Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   createTextField , MovieClipLoader и уровни (http://www.flasher.ru/forum/showthread.php?t=99035)

bettrrr 26.07.2007 19:32

createTextField , MovieClipLoader и уровни
 
Привет!
Мне надо погрузить клип и поверх него написать текст, делаю так:
На первом кадре слоя uploader:
Код:

function loadMuvie(path:String, target){
        var clipLoader:MovieClipLoader=new MovieClipLoader();
        clipLoader.loadClip(path, target);
}
loadMuvie("loaded.swf", 10);
stop();

На первом кадре слоя text:
Код:

ptimer = new Date();
time_min = ptimer.getMinutes();
time_hour = ptimer.getHours();
_root.createTextField("pfield", 50, 887.8, 49.6, 82.2, 30);
pfield.text = time_min + ":" + time_hour;
pfield.textColor = 0xFFFFFF;

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

etc 26.07.2007 19:39

target должен быть мувиклипом, а не числом.

bettrrr 26.07.2007 22:41

Хм, завтра попробую... У меня в книге написано, что можно передавать число - номер слоя.

bettrrr 26.07.2007 22:47

Всё верно, сейчас скачал мануал из прикреплённой темы:

Синтаксис
my_mcl.loadClip(url:String, target:Object ) : Boolean
Параметры
target Число, определяющее уровень во флэш плеере или путь к клипу, в который файл должен быть загружен. Содержимое клипа будет замещено загружаемым SWF файла или изображением.

хотя смущает target:Object :)

etc 26.07.2007 22:58

А, пардон, там можно и уровень указывать.
Вообще говоря, лучше вместо уровней создавать клип и в него грузить.

з.Ы. Object просто означает, что target может быть как Number, так и MovieClip.

bettrrr 26.07.2007 23:12

Цитата:

Сообщение от __etc
А, пардон, там можно и уровень указывать.
Вообще говоря, лучше вместо уровней создавать клип и в него грузить.

з.Ы. Object просто означает, что target может быть как Number, так и MovieClip.

Ну незнаю как в AS, но в других языках Object, значит object, поэтому и непонятно, ну фиг с ним.

Получается, что по мануалу я всё делаю правильно? Я это делал в конце рабочего дня, и с этой фигнёй мозг совсем опух!

сначла я делал с loadMovie() и loadMovieNum() и ничего не получалось, потом на этом форуме и несколько раз прочитал фразу: "используйте MovieClipLoader и проблем не будет", но при использовании этого класса у меня ничего не изменилось.

etc 26.07.2007 23:26

Вообще говоря от Object в AS наследуется все.
Загрузку в уровни уже пора забыть, грузите в мувиклип.

bettrrr 26.07.2007 23:58

Т.е. если я средствами AS создам клип на 10 слое и средствами AS загружу в него внешний клип, то уровень внешнего клипа будет = 10

Блин, что-то не то... Вроде бы в AS крутая объектная модель, а один из основных методов реализован криво?

PS: И ещё я не понимаю, как устроены слои, т.е. если я в программе Flash CS3 создаю несколько слоёв, в которых я что-то рисую (например 4 слоя с различными текстовыми названиями) и создаю средствами AS клип на слое с номером 2, то где он создасться? Т.е. есть бывает простой массив данных, а бывает ассоциативный массив. В DOM именованые слои представляют собой ассоциативный массив, т.е
если у меня есть слои lvl_a, lvl_b и lvl_c, то массив представляющий DOM будет таким array(lvl_a =>... , lvl_b=>... , lvl_c => .... )
если я добавлю эллемент с ключом 2, то массив станет:
array(lvl_a =>... , lvl_b=>... , lvl_c => .... , 2)


или массив выглядит так:
array(1 =>(lvl_a,...) , 2 =>(lvl_b,...) , 3 =>(lvl_c,...) , 4=>(...)), но тогда получается, что я не могу размещать клипы, которые созданы при помощи AS ниже слоём, который создвны в программе.

Блин, что за фигня?

etc 27.07.2007 00:06

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

А про уровни _levelN нужно вообще забыть.

bettrrr 27.07.2007 00:08

Ну хоть в третей версии что-то изменилось с реализацией DOM?

(Я не в курсе, т.к. последний раз писал на AS в 2002 году :) )

etc 27.07.2007 01:05

Изменилось, там глубины от 0 начинаются :D И пустых не бывает.

Kikasso 27.07.2007 03:07

_levelN - это не уровень, а этаж. Ваше текстовое поле создано на 0-м этаже, стало быть оно осталось далеко внизу.

bettrrr 27.07.2007 11:57

Цитата:

Сообщение от Kikasso
_levelN - это не уровень, а этаж. Ваше текстовое поле создано на 0-м этаже, стало быть оно осталось далеко внизу.

Поясните пожалуйста..
при загрузке клипа я указываю 10, а при создании текстового поля 50.
Вы говорите, что 10 и 50 это разный тип слоёв?

PS: Я попробовал сделать
...
loadMuvie(_root.pepa_skin, 10);
...
_level10.createTextField("timer_field", 10, 887.8, 49.6, 82.2, 30);

Но тогда текстовое поле совсем не отображается

Kikasso 27.07.2007 12:32

Вы ничего не можете создать на level, только подгрузить. Я привел аналогию с этажами, потому что это наглядно - ваш мувик это самый первый этаж (_level0). Вы можете сколько угодно вставать на стремянку, модете приклеить бумажку к потолку - но пол 10-го этажа выше вашего потолка. Не надо юзать - это тупик. Работайте на одном этаже. Создали пустой клип, загрузили в него - все счастливы.

P.S. Поле не создается, потому что клип еще не загрузился.

PikseL 27.07.2007 12:44

А вы не сильно заморачиваетесь? Может контейнер вложить в мувик, а в этом мувике на верхнем слое просто сделать текст?

bettrrr 27.07.2007 12:45

Цитата:

Сообщение от Kikasso
Вы ничего не можете создать на level, только подгрузить. Я привел аналогию с этажами, потому что это наглядно - ваш мувик это самый первый этаж (_level0). Вы можете сколько угодно вставать на стремянку, модете приклеить бумажку к потолку - но пол 10-го этажа выше вашего потолка. Не надо юзать - это тупик. Работайте на одном этаже. Создали пустой клип, загрузили в него - все счастливы.

P.S. Поле не создается, потому что клип еще не загрузился.

Ппасибо, понятно!

В окне превью я нажал Ctrl+L
И в окне вывода были такие строки:
Код:

Level #10: Frame=1
  Shape:
  Movie Clip: Frame=1 Target="_level10.instance3"
    Shape:
  Shape:
  Movie Clip: Frame=1 Target="_level10.instance4"
    Shape:
  Shape:
  Movie Clip: Frame=1 Target="_level10.instance5"
    Shape:
  Shape:

почему на уровне 3 объекта, хотя у меня только один раз используется clipLoader.loadClip("qwe.swf", 10) ?

iNils 27.07.2007 12:55

Разберемся с терминами. Есть уровень (level), есть глубина (depth) и есть слой (layer).
Когда флеш плеер подгружает swf, он помещает его в _level0. И когда в этом swf мы обращаемся к _root, то на самом деле мы обращаемся к _level0. Если мы загружаем еще один swf в уровень, скажем в _level1, то его _root, будет обращаться к _level1. Это первое его отличие от глубины, второе, это то, что мы не можем создать мувиклип, текстовое поле или приаттачить мувиклип в уровень. Только загрузить туда другой swf и только ГЛОБАЛЬНЫМИ функциями, сделать это методами MovieClip нельзя.

Каждый мувиклип (включая основной таймлайн, он же _root, он же _levelN) имеет диапазон глубин -16'384 .. 1'048'575. Где:
0..1'048'575 - предназначены для программно использования
-16'383..-1 - для объектов созданных вручную (то есть все мувиклипы, кнопки, текстовый поля, который вы расположили в среде разработки, помещаются в этом диапазоне). Конечно можно программно и сюда помещать свои объекты, но таким образом вы можете занять уже использованную глубину и удалить объект который вы расположили в ручную. Понятие слоев, есть только внутри fla для удобства работы, при создании swf, все объекты помещаются на заданные глубины.
-16'384 - для программного использования, когда вам надо расположить программно объект ниже, чем нарисованные объекты.
Создавая новый мувиклип, вы также получаете в нем диапазон глубин как и было описано выше.

Теперь ваш код.
Код:

loadMovie(_root.pepa_skin, 10);
Это значит, что раньше у вас был:
Код:

_level0
а теперь
Код:

_level0
_level10

А после
Код:

_level10.createTextField("timer_field", 10, 887.8, 49.6, 82.2, 30);
уже
Код:

_level0
_level10
        timer_field (на глубине 10)

Но по скольку ваш код выполнялся линейно, то к моменту выполнения _level10.createTextField в _level10 еще не был загружен мувиклип. Так как выполнение кода асинхронно загрзуке (пока ОС найдет местоположение файла, пока головки в диске займут нужное место, пока считают, все это происходит медленнее, чем выполнение кода). Поэтому текст и не создается.

Kikasso 27.07.2007 13:01

Упс. Вот это лекция. Исчерпывающе.
"Пол" и "потолок" на языке цифр ))
Цитата:

Сообщение от bettrrr
почему на уровне 3 объекта, хотя у меня только один раз используется clipLoader.loadClip("qwe.swf", 10) ?

Ну ведь мувик-то не пустой грузите наверное.

etc 27.07.2007 13:02

Мммм, iNils, а где там _level10 в коде автора? Ну кроме loadClip, конечно.

bettrrr 27.07.2007 13:26

iNils - круто! Очень понятно объяснил! Спасибо! Лекция удачна.

2 __etc: Тут у меня была попытка http://www.flasher.ru/forum/showpost...4&postcount=13 создать на 10 уровне.
Но я не знал, что плеер не ждёт, пока выполнится предидущее действие и продолжает выполнение кода.

iNils 27.07.2007 13:41

Цитата:

Сообщение от bettrrr
Но я не знал, что плеер не ждёт, пока выполнится предидущее действие и продолжает выполнение кода.

Это все негативный результат разработки локально. Запустили тестирование, а флешка "сразу" и подгрузилась, для глаз конечно. Если бы вы тестировали где-то сервере, то "увидили" бы загрузку, особенно если файл большой. У вас бы другие вопросы возникали, почему во время загрузки код ниже не работает (так что "многозадачность" это хорошо):D

bettrrr 27.07.2007 14:00

Цитата:

Сообщение от iNils
Это все негативный результат разработки локально. Запустили тестирование, а флешка "сразу" и подгрузилась, для глаз конечно. Если бы вы тестировали где-то сервере, то "увидили" бы загрузку, особенно если файл большой. У вас бы другие вопросы возникали, почему во время загрузки код ниже не работает (так что "многозадачность" это хорошо):D

Я и на сервере тестирую, просто загружаю маленький файл.
Я привык к другим языкам, где пока не выполнил, дальше не пошёл :moder:

iNils 27.07.2007 14:33

Цитата:

Сообщение от bettrrr
Я привык к другим языкам, где пока не выполнил, дальше не пошёл :moder:

QBasic? :) Смотря, что выполнять. Если цикл, то не пойдет. Если загрузка то пойдет.
У вас скажем 5 кадров в таймлайне. На первом кадре пару строк кода, скажем загрузка чего либо и определение переменной, а на последнем кадре условие и в зависимости от определенной переменной делаются разные вещи. И еслибы на момент загрузки выподнее код дальше прекращалось, то переменная бы не определялась и дойдя до последнего кадра анимации условие бы не выполнялось. А самое смешное, что после этого заканчивается загрузка и переменная определилась, только она нам уже не нужна :)


Часовой пояс GMT +4, время: 15:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.