Форум 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)
-   -   Затык с LoadMovie и адресациями... (http://www.flasher.ru/forum/showthread.php?t=84481)

WILD CAT 31.08.2006 22:32

Затык с LoadMovie и адресациями...
 
Ребят, нужна помощь. Ошибка, как всегда, лежит на поверхности, но я ее в упор не вижу.

Есть один *.swf файл (назовем ф1_1). В него нормально загружается другой свф (ф1_2 - он загружается с помощью LoadMovie непосредственно в мувиклип, который расположен на сцене ф1_1). И есть еще один файл ф1_3 который таким же гаком загружается в мувиклип, расположенный на сцене ф1_2. В ф1_2 есть мувиклип, который дублируется и именуется (дубликат) dplayer. Ему я вот этим кодом присваиваю значение targ="playa" и потом загружаю в него файл (назовем ф2).
Код:

duplicateMovieClip(dupl_box, "dplayer", this.getNextHighestDepth());
        dplayer.targ= "playa";
        loadMovie("data/models/players/1/code.swf", dplayer);

Ф2 имеет на первом кадре всего одну строку
Код:

_parent.map[targ].stop();
Теоретически эта строка должна останавливать анимацию мувиклипа, который находится на сцене ф1_3 и имя ему - playa.
Дело как раз в том, что не останавливает.
Если вместо [targ] поставить .playa то все работает. Значение targ в трейсе ф2 пишется undefined. Но координаты ф2 меняются спокойно.
Помогите плиз!

WILD CAT 31.08.2006 23:26

Или stop не работает с динамической адресацией?

WILD CAT 31.08.2006 23:30

Хотя нет...
Код:

targ="playa";
_parent.map[targ].stop();

Так то работает...

wvxvw 01.09.2006 00:12

Из всего написанного не понятно почему присвоив dplayer.targ какое-то значение ты ждешь, что то же значение будет и у targ в любом месте откуда ни обратись...

WILD CAT 01.09.2006 00:17

Я присваиваю значение targ только что отдублированному мувиклипу dplayer. Потом я в dplayer загружаю *.swf файл с кодом на первом кадре, который по идее должен использовать это значение нормально, вот и все... если я правильно понял вашу мысль.

wvxvw 01.09.2006 02:31

Код:

var _l1:MovieClip = _root.attachMovie("holder_01", "h_mc", 0);
_l1.b_txt.text = "stopped";
_l1._targ = "h_mc";
_l1.stop();
var _l2:MovieClip = _l1.duplicateMovieClip("h1_mc", 5, {_targ:"h1_mc", _x:200});
_l2.b_txt.text = "unstopable";
var _l3:MovieClip = _root.attachMovie("bt", "b_mc", 10, {_x:150, _y:200});
_l3.onRelease = function(){
        var _l1:MovieClip = _root._l2.createEmptyMovieClip("tgt", 15);
        _l1.loadMovie("test.swf");
        _l1._x = _l1._parent._width;
        _l1._y = _l1._parent._height;
        _l1._parent.onRelease = function(){
                trace(this["_targ"]+" "+this._parent._l1["_targ"]);
                this._parent[this["_targ"]].stop();
                this._parent[this["_targ"]].b_txt.text = "stopped";
                this._parent[this._parent._l1["_targ"]].play();
                this._parent[this._parent._l1["_targ"]].b_txt.text = "unstopable";
        }
}

Всяко извращался, - ничего с переменными не происходит, где были заданы, там и остались... %)

WILD CAT 01.09.2006 03:14

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

WILD CAT 01.09.2006 20:36

Самое глюкное, что вот так не работает (принимает):
Код:

dplayer.targ= "playa";
А вот так работает
Код:

dplayer._x= 50;

wvxvw 03.09.2006 00:54

да нет, ты просто присваиваешь в одном месте, а спрашиваешь в другом, вот упрощенный пример твоей ошибки:
Код:

my_mc._myProp = "My Property";
trace(my_mc[_myProp]); //undefined;

Потому что значение переменной внутри квадратных скобок не было определено в том месте откуда делается вызов.
Если сделаешь так:
Код:

my_mc._myProp = "My Property";
trace(my_mc["_myProp"]); //My Property;

То значение прочитается, т.как понятно, что ты передаешь значение, а не пытаешся подставить значение пустой (несуществующей переменной).

WILD CAT 03.09.2006 02:53

Я не думаю, что ошибка в этом, ибо я проверил уже всеми известными мне способами. И пришел к якобывыводу, что дело в некой фиче duplicate. Пришлось данный лаг обходить. В подтверждение скажу, что если dplayer.targ="playa" забить в enterframe то все прекрасно работает. Другой вопрос, что enterframe мне в общем то не нужен, ну да ладно. Каким гаком я обошел сказать не могу, ибо тогда рубанули свет и ничего не сохранилось...
100% адресация и синтаксис (типа как в примере выше) у меня правильные, ведь с энтерфрамом работает все толково и как надо... убицца в первый раз встречаюсь с таким, учитывая, что я ужо неоднократно использовал это св-во.

wvxvw 03.09.2006 05:52

Ок, объясню почему работало с энтерфреймом. Очевидно в этой функции ты определял значение твоей переменной _в том месте откуда ты к ней обращаешся_.
Во всех остальных примерах ты обращаешся к свойству имени которого ты _не знаешь_.
Пример еще раз:
Код:

var targ;
trace(targ); // undefined *Значение переменной не присвоено (ты ее даже не объявляешь)*
my_mc.targ = "";
trace(my_mc[targ]); // undefined *Ессесна, ты пытаешься обратиться к
// свойству клипа по имени 'undefined', но у клипа нет такого свойства,
// поэтому результатом снова будет 'undefined'*
trace(my_mc["targ"]); // "" *Наконец-то ты обращаешься к свойству,
// которое ты определил раньше*


WILD CAT 03.09.2006 15:17

Код:

trace(my_mc["targ"]);
Если мне не изменяет память, то ответ этого трейса будет "targ".
Если так, то это не то что мне нужно. Мне то нужно, чтобы например значение targ было бы равно "playa". А потом кодом my_mc[targ] получилась адресация my_mc.playa

***Чуть позже***
Опс - нет я был не прав... момент

WILD CAT 03.09.2006 15:36

Хм... нет, секунду, все правильно... за исключением
Цитата:

Если мне не изменяет память, то ответ этого трейса будет "targ".
У меня должна получится вышеозначенная адресация. Если бы весь код был в одном кадре, то все бы работало, а так у меня значение присваивается только что отдублированному клипу.
К тому же если у меня значение targ="playa", то адресация my_mc["targ"] даст адрес my_mc.targ
А если my_mc[targ], то адрес будет my_mc.playa, что мне и нужно.
Я наверное туп и не вижу решения в вашем варианте, но я его понял, это точно. Наперед скажу спасибо, но вопрос для остается открытым.

wvxvw 03.09.2006 16:36

Цитата:

Если мне не изменяет память,
Это очень печально, но память тебе все-таки изменяет, значение "targ" переменной targ нигде и ни разу не присваивалось... Именно поэтому трейс ну никак не сможет выдать такой ответ.
Чтобы трейс вывел имя переменной
Код:

my_mc.targ="blah-blah";
for(i in my_mc){
trace(i+", "+my_mc[i]); // Выводит 'targ, blah-blah'
}

Ты упорно продолжаешь путать имя переменной с ее значением.
Чтобы обратится к свойству объекта через оператор [] нужно в качестве параметра передать Стринг. Не важно определишь ли ты значение этого стринга до обращения или непосредственно в момент обращения.
Т.е.
Код:

my_mc.targ = "abcd";
var my_arr:Array = my_mc.targ.split("");
trace(my_mc[my_arr[0] + my_arr[1] + my_arr[2] + my_arr[3]]); // Выводит abcd

Правильно
Код:

my_mc.targ = "abcd";
trace(this[targ]); // undefined *my_mc!=this !!!*

Не правильно

И вообще, лучше дай исходник, а то так чет очень тяжко как-то =)

WILD CAT 03.09.2006 19:16

Я б с удовольствием дал, но то что я наделал там, состоит из кучи файлов... придется передавать все, а этого не получится.
Я прекрасно понимаю примеры, которые вы приводите, и понимаю что там правильно, а что нет.
Тем более, что значение targ уменя определяется, но в другом файле, а теоретически приниматься оно должно другим файлом, загруженным в мувиклип.


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

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