Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Дубликат без слушателей (http://www.flasher.ru/forum/showthread.php?t=192836)

GoodWin74 20.01.2013 00:20

Дубликат без слушателей
 
Делаю дубликат Loadera таким методом:
Код AS3:

function onLoaded(e:Event){
addChild(spTelo); //spTelo:Loader
spTelo.x=275;
spTelo.y=274;
MovieClip(spTelo.content).gotoAndStop(1);
var c:Class = Object(spTelo.content).constructor;
var copy:MovieClip = new c ();
addChild (copy);
copy.x = copy.y = 100;
copy.gotoAndStop (2);
copy.addEventListener(MouseEvent.CLICK,function(){
MovieClip(spTelo.content).gotoAndStop(2);
})
}

С виду вроде все работоспособно, но когда вешаешь на копии слушатели, то они игнорируются, как будто их и не вешали. Подскажите, пожалуйста, в чем причина?:confused:

alatar 20.01.2013 04:20

Loader у вас как был один, так один и остался. Вы создали еще один экземпляр класса из загруженной swf. На какие события вы подписывались?

Wolsh 20.01.2013 12:35

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

GoodWin74 20.01.2013 12:50

alatar, а как тогда сделать, что бы и события были у копии, подскажите, пожалуйста, если не сложно :)


Wolsh, Ну я думаю понятно, что я пишу addEventListener, на объект copy. Так что скрывать особо и нечего :)

alatar 20.01.2013 12:59

Они и так у нее есть. Зависит от того какие события вы хотите получить.

GoodWin74, вы решили устроить викторину "отгадай проблему"? Больше конкретики в вопросах. Вы утверждаете, что у вас не получается подписаться на некие события и при этом упорно скрываете что это за события.

GoodWin74 20.01.2013 13:03

Вложений: 1
Извиняюсь, тогда.
Код AS3:

copy.addEventListener(MouseEvent.CLICK,function(){
MovieClip(spTelo.content).gotoAndStop(2);
})

прикрепляю так же проект

caseyryan 20.01.2013 13:38

Цитата:

а как тогда сделать, что бы и события были у копии, подскажите, пожалуйста, если не сложно
Должно быть имелось в виду, чтобы и слушатели событий были добавлены к копии?
Их прийдется добавлять к ней самостоятельно.

GoodWin74 20.01.2013 13:57

Ну я уже понял, что как то добавить нужно, но не могу найти как :) Буду признателен и благодарен за небольшой пример :)

alatar 20.01.2013 14:13

Что-то в загружаемой флешке блокирует мышиные события.
Код AS3:

private function onLoaded(e:Event):void{
        addChild(spTelo);
        spTelo.x=150;
        spTelo.y=150;
        MovieClip(spTelo.contentLoaderInfo.content).gotoAndStop(1);
        var c1:Class = MovieClip(spTelo.content).constructor;
        var copyTelo:MovieClip = new c1();
 
        var container:Sprite = new Sprite();
        container.addChild(copyTelo);
        addChild(container);
        container.x=110;
        container.y=50;
        copyTelo.width=50;
        copyTelo.height=59.7;
        copyTelo.gotoAndStop(2);
        copyTelo.mouseChildren = false;
        container.addEventListener(MouseEvent.CLICK,copy_clickHandler);
}
 
private function copy_clickHandler(event:MouseEvent):void
{
        MovieClip(spTelo.content).gotoAndStop(2);
        trace("click");
}


GoodWin74 20.01.2013 14:40

alatar, Спасибо большое! :)

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

Wolsh 20.01.2013 16:46

Цитата:

Wolsh, Ну я думаю понятно, что я пишу addEventListener, на объект copy. Так что скрывать особо и нечего
Цитата:

copy.addEventListener(MouseEvent.CLICK,function(){
MovieClip(spTelo.content).gotoAndStop(2);
})
Да уж.. нечего.. Особенно если учесть, что у меня такой код даже не скомпилится.
Где принимаемый параметр у функции-обработчика?

dimarik 20.01.2013 17:02

Цитата:

Сообщение от GoodWin74 (Сообщение 1116699)
Код AS3:

var c:Class = Object(spTelo.content).constructor;
var copy:MovieClip = new c ();


И что, копирует вместе с графикой и со всеми добавленными в authority mode дитями?

alatar 20.01.2013 17:16

Копирует. Там MainTimeline в качестве базового класса.

dimarik 20.01.2013 20:21

Цитата:

Сообщение от alatar (Сообщение 1116800)
Копирует. Там MainTimeline в качестве базового класса.

MainTimeline, спасибо. Это не умаляет моего вопроса. Неужели возможно копирование с графикой и далее по тексту?

alatar 20.01.2013 20:39

Вполне. Просто создается новый инстанс.

dimarik 20.01.2013 21:04

Вы уверены?

alatar 20.01.2013 21:16

Я проверил. Конкретно флешка из поста нормально инстанцируется. Сделана, судя по метадате, в CS4. Досконально проверить не могу, за неимением Flash Proffesional.

dimarik 21.01.2013 11:53

Цитата:

Сообщение от GoodWin74 (Сообщение 1116699)
С виду вроде все работоспособно, но когда вешаешь на копии слушатели, то они игнорируются, как будто их и не вешали.

[object MainTimeline] так себя ведет. Скорее всего в его недрах происходит MouseEvent#stopImmediatePropagation(). Поставьте ему mouseEnabled = false и заверните в спрайт.

Добавлено через 17 минут
Я ошибся. Дитя [object MainTimeline], — [object MovieClip] перехватывает события мыши.

GoodWin74 21.01.2013 15:13

Т.е. так понимаю кроме обертки в спрайт выхода нет? Да флеш проект создан в Flash Pro CS4.

dimarik 21.01.2013 15:20

Попробуйте назначить DocumentClass, чтобы избавиться от MainTimeline.

GoodWin74 21.01.2013 15:37

Можно описать каким образом? Было бы очень наглядно и понятно :)

iflamberg 21.01.2013 15:47

Так, погоди, ты что ли document class загружаемой флешке так и не назначил? Я же в своем посте четко написал:
Цитата:

Редактируем загружаемый мувик. У тебя, помню, он telo.fla назывался. Теперь назначаем всему ролику класс, скажем Telo, но файл класса создавать не надо, только имя дать.
Как же он у тебя вообще скопировался. В Object(spTelo.content).constructor ведь тогда Movie Clip o_O

Отредактируй загружаемую флешку flash'ем, кликни на пустом месте и в свойствах назначь Class. Странно, что фраза "Попробуйте назначить DocumentClass" вызывает у тебя непонимание, для indexTest ты же его создал.

GoodWin74 21.01.2013 15:55

Я не назначал не чего :) просто создал проект FLA и писать код начал . Не совсем понял, где в свойствах? В параметрах публикации что ли? :)

iflamberg 21.01.2013 15:58

О боже. Ну indexTest.fla ты же связал с indexTest.as. Сделай то же самое с загружаемым мувиком. Только файл класса не создавай, только имя назначь.

GoodWin74 21.01.2013 16:02

Я связывал их просто в поле у fla поле с лейблом Class и карандаш нажимаю :)

iflamberg 21.01.2013 16:03

Это и называется создать Document class.

GoodWin74 21.01.2013 16:14

Вписал и скомпилировал. Но безуспешно.:o

Я правильно понял? Вписал во флеш проекте telo.fla в поле Class текст telo нажал карандаш и сохранил и опубликовал :)

iflamberg 21.01.2013 16:43

Хм. Действительно, даже с Document class у загружаемого ролика слушатели мыши не работают.
Ну, вложи в мувик-контейнер, я проверил, тогда ок. Или воспользуйся другим методом копирования загруженных роликов.


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

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