Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   attachMovie, доступ к методам клипа (http://www.flasher.ru/forum/showthread.php?t=54343)

Eldar 03.02.2004 09:49

attachMovie, доступ к методам клипа
 
В библиотеке клип bar (linkage есть, id=bar есть). На первом фрейме клипа прописаны методы. Приаттачиваю к главному клипу:
_root.attachMovie("bar", "bar", 1);

Вызываю методы из первого фрейма клипа, например:

_root.bar.traceMsg();

результат - нуль.

Всем спасибо заранее, даже, если пошлете в... документацию :)

Cvazimodo 03.02.2004 11:20

_root.attachMovie("bar", "bar", 1);

_root.bar.onEnterFrame = function() {
trace('1');
}


Попробуй так.

Eldar 03.02.2004 12:45

Цитата:

Оригинал написал(а) Cvazimodo
_root.attachMovie("bar", "bar", 1);

_root.bar.onEnterFrame = function() {
trace('1');
}


Попробуй так.

Так работает, я это знаю. Дело не в этом. Просто у меня таких клипов будет несколько и создаваться они будут динамически, причем выглядеть и отрабатывать будут в зависимости от того, какие параметры я буду передавать из головного клипа.

Конечно, можно было решить проблему так:
for(i=0; i<some_var; i++)
{
_root.attachMovie("bar", "bar" + i, 1);

_root["bar"+i].onEnterFrame = function()
{
trace('1');
}
и т.д.
}

но тогда возникнет проблема с передачей параметров каждому созданному клипу. В руте придется создавать массив с параметрами и выбирать их в цикле по i. А если несколько параметров? - Несколько массивов!!! И т.д.

Просто хотелось создать в подклипе методы и переменные и передавать напрямую после attach.

Есть еще мысли?

Cvazimodo 03.02.2004 13:08

Может я всё-таки чего-то непонимаю? :)

for (i=0; i<10; i++) {
_root.attachMovie("bar", "bar" add i, i);

// создаём переменную
_root["bar" add i].myVar = 'Моя переменная ' add i;

_root["bar" add i].onEnterFrame = function() {
trace(this.myVar);
}

}

Eldar 03.02.2004 13:52

Цитата:

Оригинал написал(а) Cvazimodo
Может я всё-таки чего-то непонимаю? :)

for (i=0; i<10; i++) {
_root.attachMovie("bar", "bar" add i, i);

// создаём переменную
_root["bar" add i].myVar = 'Моя переменная ' add i;

_root["bar" add i].onEnterFrame = function() {
trace(this.myVar);
}

}

Ну не все так просто. :( Суть такова, я создаю кнопки для коллекций, вернее клип кнопки, в которой есть текст и графический элемент. После этого создаю ряд этих кнопок динамически, причем текст для кнопки передается рутом после создания экземпляра. Так вот, все это было прописано в клипе. Т.е. все было распихано по методам, создание текстФилда, переменные для этого текста и т.д., должны были быть еще несколько методов и свойст (потом). Что я хотел, просто аттачить их и потом выполнять действия, присущие им, обращаясь простым вызовом типа _root.someClip.someMethod(param_01, param_02, ....).

В двух словах, все вроде классов - создал класс, наклепал экземпляры, обратился к методам, все...

А вообще в принципе, почему не работает обращение к методам, если клип приаттачен. Вот мы и замкнули круг :) Извини, если долго петлял

_1_Maxim 04.02.2004 22:34

Я с этим сталкивался.
Это из-за недоделанности Flash.
Методы, который ты определил в первом фрейме мувика, можно использовать только в следующих (после attachMovie ) фреймах _root(или другом месте). Я с этим уже сталкивался. Я тебя понимаю. Ты хочеш из первого фрейма мувика сделать файл (заголовок и инициализация). Это оперативно и удобно, но зачем убивать целый фрейм на описание? Лучще поставь FlashMX2004. Там это всё делается в отдельном файле.

Nox Noctis 05.02.2004 13:10

Цитата:

Оригинал написал(а) _1_Maxim
Это из-за недоделанности Flash.
Методы, который ты определил в первом фрейме мувика, можно использовать только в следующих (после attachMovie ) фреймах _root(или другом месте).

нет уж, вот это как раз - из-за общей логики работы флэша :)
чтобы выполнился код первого кадра, он должен проиграться. а проиграться он может только при следующей смене кадра, после вызова аттачМуви. если бы было наоборот - то не было бы возможности сразу после аттача передать клипу какие-то параметры еще ДО проигрывания его первого кадра.. в пятерке с этим реальная заморочка была

_1_Maxim 05.02.2004 14:07

Да. Ты прав. Дело в недоделанности логики.

Вранних версиях коды связанны с фреймами(временем).
Да здравствует FlashMX2004!

Nox Noctis 05.02.2004 14:34

Цитата:

Оригинал написал(а) _1_Maxim
Да. Ты прав. Дело в недоделанности логики.
код в такой среде не может не быть связан с фреймами, иначе пришлось бы городить большой огород ради синхронизации... а без покадровой синхронизации кода и анимации флэш был бы вообще непонятно чем :)

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

а в пятерке были грабли страшные, это да. я уже боюсь вспомнить что было в четверке :))

Eldar 05.02.2004 15:46

Цитата:

Оригинал написал(а) Nox Noctis
нет уж, вот это как раз - из-за общей логики работы флэша :)
чтобы выполнился код первого кадра, он должен проиграться. а проиграться он может только при следующей смене кадра, после вызова аттачМуви. если бы было наоборот - то не было бы возможности сразу после аттача передать клипу какие-то параметры еще ДО проигрывания его первого кадра.. в пятерке с этим реальная заморочка была

Круто, я понял, хотя поначалу, когда читал, чувствовал себя примерно так: "никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть." :)
Тогда, если я проинициализирую клип в первом кадре _root, то я могу использовать его встроенные метода в последующих кадрах _root? Я правильно тебя понял?

Цитата:

Оригинал написал(а) Nox Noctis

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

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

а в пятерке были грабли страшные, это да. я уже боюсь вспомнить что было в четверке :))

О какой среде ты говоришь? И что значит вынос в отдельный файл? Я не пользовался 2004-ым.

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

_1_Maxim 05.02.2004 22:18

Цитата:

Оригинал написал(а) Eldar

... И что значит вынос в отдельный файл? Я не пользовался 2004-ым...


Это, наверное, ко мне.

В отдельный файл выносится всё то, что ты пишеш в первом фрейме приаттачиваемого мувика(заголовок). И не нужно "ждать" целый фрейм в _root, чтобы воспользоваться твоими методами.

Наверное..?

Кстати, а можно сразу пользоваться предопределёнными методами?

Eldar 06.02.2004 10:05

Цитата:

Оригинал написал(а) _1_Maxim


Это, наверное, ко мне.

В отдельный файл выносится всё то, что ты пишеш в первом фрейме приаттачиваемого мувика(заголовок). И не нужно "ждать" целый фрейм в _root, чтобы воспользоваться твоими методами.

Наверное..?

Кстати, а можно сразу пользоваться предопределёнными методами?

Ок. Тогда причем здесь 2004-ый? Я могу это сделать и в шестом. Вынести в отдельный файл и "заинклюдить" его. Или ты хочешь сказать, что в 2004-ом обращение к предопределенным методам разрешено до проигрывании первого фрейма? Не думаю. Если мы говорим об инклюде, то ты просто инклюдишь их в текущий фрейм, все равно, что вписать все это дело вживую.

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

_1_Maxim 06.02.2004 10:24

Цитата:

Оригинал написал(а) Eldar


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

Да на счёт инклюда та ,наверное, прав. Но в 2004 не совсем инклюд. Там такая странная конструкция: класс, расширяющий
MovieClip. Эту тему мы недавно обсуждали где-то на форуме.

Мне близко то о чём ты говориш. Я сам в пятёрке да и сейчас частенько так делаю. Это удобно и быстро. И не надо загромождать сцену всякими прототипами, как это здесь модно(на форуме). Кстати для этого тоже нужен бесполезный фрейм.
Правда этот скрипт(первый фрейм) кое-что весит. И если ты аттачиш кучу мувиков увеличивается память, используемая плеером. Совсем немного, но...

Eldar 06.02.2004 11:07

Цитата:

Оригинал написал(а) _1_Maxim


Да на счёт инклюда та ,наверное, прав. Но в 2004 не совсем инклюд. Там такая странная конструкция: класс, расширяющий
MovieClip. Эту тему мы недавно обсуждали где-то на форуме.

В принципе, я недавно пишу на акшине, но я пришел в него из C++, и хотя не писал так, как ты упомянул, но понял, о чем ты говоришь. Знаешь, это логически верно. Просто курс на OOP, который Macromedia взяла еще в 5-ке, диктует логическое данное логическое продолжение. Зачем мучаться с прототипами, если можно склепать наследника класса, расширить его своими методами и вперед с песней. Поверь мне, это правильно и удобно. Но вопрос опять не в том, а конфликте кода и анимации, вернее, наборот, проблемах, возникающих из-за их синхронизации. Но, опять, если не будет синхронизации, то это уже не Flash, как справедливо заметил Nox Noctis.

Цитата:

Оригинал написал(а) _1_Maxim

Мне близко то о чём ты говориш. Я сам в пятёрке да и сейчас частенько так делаю. Это удобно и быстро. И не надо загромождать сцену всякими прототипами, как это здесь модно(на форуме). Кстати для этого тоже нужен бесполезный фрейм.
Правда этот скрипт(первый фрейм) кое-что весит. И если ты аттачиш кучу мувиков увеличивается память, используемая плеером. Совсем немного, но...

Теперь о сочетании вышеприведенного метода и тем, что ты скзал выше. Не имеет значения расширяешь ли ты прототип в первом кадре рута, или расширяешь класс там же, все равно тебе необходим этот злосчастный первый фрейм.
Вопрос в другом, и это действительно интересно. Если ты определишь методы в подклипе, затем объявишь подклип наследником-расширением MovieClip, будет ли у тебя после объявления и аттача доступ к методам в первом фрейме, или нет?
Когда проделываешь ту же операции не с классом, а с прототипом - не работают методы в первом фрейме. Я думаю, что и с классами не будет работать. Я думаю, что механика обращения к методам не изменилась, изменился сам синтаксис, который стал более отвечать идеям OOP.

Ну, по-моему, я не очень умничал :)

_1_Maxim 06.02.2004 13:09

Я сразу понял, что ты из ООП.
Я тоже в основном работаю С++.

Советую, поставь 2004. Там тебя ждёт много приятных неожиданностей!

Eldar 06.02.2004 13:57

Цитата:

Оригинал написал(а) _1_Maxim
Я сразу понял, что ты из ООП.
Я тоже в основном работаю С++.

Советую, поставь 2004. Там тебя ждёт много приятных неожиданностей!

Спасибо за совет, вот закончу с этим заказом и поставлю, посмотрим на приятные неожиданности.


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

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