Форум 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)
-   -   Теряются клипы (http://www.flasher.ru/forum/showthread.php?t=93075)

Ярик 13.03.2007 16:40

Теряются клипы
 
Теряются клипы Btn*
Код:

for (var i = 0; i < nav.pages.length; i++) {
        attachMovie("Btn", "Btn" + i, getNextHighestDepth(), {_x:0, _y:i * 25});
        this["Btn"+i].onPress = function() {
                тру-ля-ля;
        };
        var tween:Tween = new Tween(this["Btn" + i], "_y", mx.transitions.easing.Elastic.easeOut, 0, i * 25, 2, true);
        tween.start();
}

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

iNils 13.03.2007 16:45

Конструктивных ошибок нет. Исходник покажите?

etc 13.03.2007 16:45

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

vadja 13.03.2007 16:51

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

это как вариант

Ярик 13.03.2007 16:52

Спасибо! Помогло...
Изменил тупо getNextHighestDepth() на i.
А нет функции, способной определять незанятую уже глубину?

vadja 13.03.2007 16:53

getNextHighestDepth() и есть эта функция

Ярик 13.03.2007 16:56

Да, но trace(getNextHighestDepth()) выдает в этом цикле одно и то же значение для каждого нового прицепляемого клипа

iNils 13.03.2007 16:57

Цитата:

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

С какой стати?

etc 13.03.2007 16:59

См. пост #7.
Видимо, это где-то непонятно где создается.

iNils 13.03.2007 17:00

Цитата:

Сообщение от __etc
См. пост #7.
Видимо, это где-то непонятно где создается.

то есть аттач для одной области видимости, а глубина для другой определяется?

etc 13.03.2007 17:03

Ну, как видишь, факт.
Вообще, нечего гадать, лучше бы исходник нам предоставили.

Ярик 13.03.2007 17:07

Жуть какая-то,
trace(this.getNextHighestDepth());
выдает undefined.

iNils 13.03.2007 17:08

а что выдает
trace (this)
и
trace (typeof this)

Ярик 13.03.2007 17:12

Исходник:

_root:
_frame1:

Код:

var currentPage:Page;
var xmlDoc:XML = new XML();
var navigation:Content;
xmlDoc.load("content.xml");
xmlDoc.onLoad = function(success:Boolean) {
        if (success) {
                navigation = new Content(xmlDoc);
                menu.Create(navigation);
                currentPage = navigation.pages[0];
                setPage(currentPage);
        } else {
                trace("Не получается!.. :(");
        }
};
var setPage:Function = function (page:Page) {
        header.fx.Start(page.header);
        txt.htmlText = page.text;
};

Клип menu:
_frame1:

Код:

import mx.transitions.Tween;
var buttons:Array;
var Create:Function = function (nav:Content) {
        for (var i = 0; i < nav.pages.length; i++) {
                this.attachMovie("Btn", "Btn" + i, this.getNextHighestDepth(), {_x:0, _y:i * 25});
                trace(this.getNextHighestDepth());
                this["Btn"+i].page = nav.pages[i];
                this["Btn"+i].onPress = function() {
                        _parent.setPage(this.page);
                };
                var tween:Tween = new Tween(this["Btn" + i], "_y", mx.transitions.easing.Elastic.easeOut, 0, i * 25, 2, true);
                tween.start();
        }
};


iNils 13.03.2007 17:15

Исходник это fla + xml, или мы должны сами их создавать и придумывать (причем каждый смотрящий)?

Ярик 13.03.2007 17:16

Цитата:

Сообщение от iNils
а что выдает
trace (this)
и
trace (typeof this)

Тут все корректно: соответственно
_level10.menu
и
MovieClip

Ярик 13.03.2007 17:21

Цитата:

Сообщение от iNils
Исходник это fla + xml, или мы должны сами их создавать и придумывать (причем каждый смотрящий)?

C разбором XML все работает корректно, и проблема к XML имеет отношение только в получении верхнего предела цикла, что, в общем, тоже корректно.

Ярик 13.03.2007 17:23

Цитата:

Сообщение от __etc
См. пост #7.
Видимо, это где-то непонятно где создается.

Вы меня извините ради Бога, но я новичек на форуме.
Пост #7 - это где?

iNils 13.03.2007 17:32

http://www.flasher.ru/forum/showpost...35&postcount=7

etc 13.03.2007 17:37

Судя по всему, создание происходит в классе, который не является наследником MovieClip.

Ярик 13.03.2007 17:49

Цитата:

Сообщение от __etc
Судя по всему, создание происходит в классе, который не является наследником MovieClip.

Так в этом-то и проблема: класс создавался ручками в библиотеке - правой кнопкой мыши -> New symbol -> MovieClip.
Функция Create в первом фрейме клипа, вызов из _root.
Потом ручками перетаскивался на _root.
Instance name -> menu.

Голова кругом :wacko:

iNils 13.03.2007 17:51

Чего чего?

etc 13.03.2007 17:51

Выкладывайте исходник, надоело. Телепатов тут нет.

Ярик 13.03.2007 17:55

Исходник еще раз:

_root:
_frame1:

Код:

var currentPage:Page;
var xmlDoc:XML = new XML();
var navigation:Content;
xmlDoc.load("content.xml");
xmlDoc.onLoad = function(success:Boolean) {
        if (success) {
                navigation = new Content(xmlDoc);
                menu.Create(navigation); // Вызов этой злополучной
                currentPage = navigation.pages[0];
                setPage(currentPage);
        } else {
                trace("Не получается!.. :(");
        }
};
var setPage:Function = function (page:Page) {
        header.fx.Start(page.header);
        txt.htmlText = page.text;
};

Клип menu:
_frame1:

Код:

import mx.transitions.Tween;
var buttons:Array;
var Create:Function = function (nav:Content) {
        for (var i = 0; i < nav.pages.length; i++) {
                this.attachMovie("Btn", "Btn" + i, this.getNextHighestDepth(), {_x:0, _y:i * 25});
                trace(this + ": " typeof(this)); // _level10.menu: MovieClip
                trace(this.getNextHighestDepth()); // Undefined
                this["Btn"+i].page = nav.pages[i];
                this["Btn"+i].onPress = function() {
                        _parent.setPage(this.page);
                };
                var tween:Tween = new Tween(this["Btn" + i], "_y", mx.transitions.easing.Elastic.easeOut, 0, i * 25, 2, true);
                tween.start();
        }
};

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

lowka 13.03.2007 17:58

Убрал все лишнее.
Цитата:

Сообщение от Ярик
Исходник:
_root:
Код:


xmlDoc.onLoad = function(success:Boolean) {
        if (success) {
                ....
                menu.Create(navigation);
                ....
        }
        ....
};

Клип menu:
_frame1:

Код:

....
var Create:Function = function (nav:Content) {
        ...
        trace(this.getNextHighestDepth());
        ....
};


this в onLoad на xml указывает вроде, а у него нет метода getNextHighestDepth.

iNils 13.03.2007 18:02

А метод attachMovie значит есть?

lowka 13.03.2007 18:04

Цитата:

Сообщение от iNils
А метод attachMovie значит есть?

Ошибочка вышла :rolleyes:

Ярик 13.03.2007 18:08

Цитата:

Сообщение от lowka
this в onLoad на xml указывает вроде, а у него нет метода getNextHighestDepth.

Но XML в руте, а
Код:

var Create:Function = function (nav:Content) {
        ...
        trace(this.getNextHighestDepth());
        ....
};

это в мувике и this в этом контексте - мувик
trace(this + ": " + typeof(this));
выдает
_level10.menu: MovieClip

[__etc: Оформлять код не забываем.]

etc 13.03.2007 18:15

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

this.create 13.03.2007 18:29

Ярик
Выложите исходник - это значит, сделайте облегченную версию вашего неработающего fla+xml, зажмите ее раром и прикрепите к сообщению. Те кто хотят вам помочь скачают ваш исходник и поглядят, что у вас там на самом деле.
И это не просто так - есть куча случаев когда после просмотра исходника проблема благополучно решалась. И наоборот - долгие обсуждения и гадания и нерешенная проблема.

Ярик 13.03.2007 18:35

Цитата:

Сообщение от __etc
Мне кажется, вам нужно узнать, что такое области видимости, классы и наследование, как минимум.

Про классы и наследование-то я знаю если не все, то почти все - 14 лет стажа С++.
А вот области видимости - тут признаю. С флэшем всего две недели знакомства и, в основном, написание классов для разбора XML.

Ну ладно, господа! Не буду больше отрывать Вас от дел. Если и не помогли, то хотя бы приятно такое внимание к проблеме.
Спасибо.

Ярик 13.03.2007 18:41

Вложений: 1
Исходник

iNils 13.03.2007 18:45

Вот и проблема нашлась. В 6-ой версии getNextHighestDepth нету.
Вместо этого метода поставте просто i

etc 13.03.2007 18:47

Как оно все просто, оказывается :)

Ярик 13.03.2007 18:56

Спасибо, дорогие мои!!!
Я же говорил: то, что под носом, незаметнее всего.
Просто i я поставил еще в начале этих разборок. Но хотел разобраться, как это - экземпляр класса есть, а метод класса для него неопределен.
Еще раз СПАСИБО!
З.Ы. А МХ это с какой версии?

iNils 13.03.2007 22:39

МХ соответствует 6-ой версии плеера.

etc 13.03.2007 22:41

MX 2004 — 7. Дальше эм-иксы кончились.


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

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