Форум 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=211037)

KaterinaRash 15.06.2015 11:50

Проигрывание ролика в ролике по кнопке
 
Существует ролик в котором расположены кнопки, при нажатии на кнопку должен проигрываться Фрагмент ролика. Сам фрагмент ролика (MovieClip) находится на этой же сцене в другом слое.
Пр написании кода возникает ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _fla::MainTimeline/frame1()

ЕГЭ1 - это кнопка
ЕГЭ - это MovieClip

В дальнейшем предполагается создать еще 8 кнопок и 8 мувиков.
Подскажите новичку как это осуществить?
Код:

Код AS3:

ЕГЭ.stop();
this.ЕГЭ1.addEventListener(MouseEvent.CLICK, clickListener1);
function clickListener1(event:MouseEvent): void{
 
                ЕГЭ.play();
 
}


samana 15.06.2015 16:59

Во-первых лучше используйте латиницу в названиях, да и вообще в программировании.
А ваши имена ЕГЭ и т.д. точно прописаны именно на этих объектах (в панели Properties - InstanceName), а не просто в библиотеке?

KaterinaRash 15.06.2015 18:15

Да, имена действительно прописаны в свойствах.

Добавлено через 12 минут
Спасибо, за совет с латиницей!!!
Я решила вопрос:
Код главной сцены, по нажатии на кнопку переходит на новый кадр в котором содержится другой мувик:
Код AS3:

stop();
ege1.addEventListener(MouseEvent.CLICK, clickListener1);
function clickListener1(event:MouseEvent): void{
 
                nextFrame();
 
}

а во втором мувике расположены три кнопки: назад на главную, воспроизведение и перемотка на 65 кадров назад
код:
Код AS3:

this.main.addEventListener(MouseEvent.CLICK, clickListener10);
function clickListener10(event:MouseEvent): void{MovieClip(parent).gotoAndPlay(1);
 
}
playb.addEventListener(MouseEvent.CLICK,playF);
 
function playF(e:MouseEvent): void{
 
                gotoAndPlay (currentFrame + 25);
        if(currentFrame==totalFrames)
        {
                MovieClip(parent).gotoAndPlay(1);
        }
}
 
this.prevb.addEventListener(MouseEvent.CLICK, clickListener13);
function clickListener13(event:MouseEvent): void{gotoAndStop (currentFrame - 65);
}

Проблема была в том, что я не учитывала родительский уровень при возвращении назад:
Код AS3:

MovieClip(parent).gotoAndPlay(1);

Осталось добавить остальные кнопки и мувики (по 8 штук) и чтоб все работало!
Если не получится, я напишу!!!

samana 15.06.2015 18:27

Если ЕГЭ это название кнопки в вашем мувике, то к этой кнопке нужно обращаться через её родителя, то-есть через имя мувика в котором она лежит (myMovieClip.ЕГЭ.addEvent и т.д.). Если вышеприведенный код располагается на основной сцене.
Просто ваш исходник я не могу посмотреть, как как у меня только cs3.

KaterinaRash 16.06.2015 12:16

Всегда ломала голову, а где в окне программы (или на каком объекте) мне прописать myMovieClip, чтобы система понимала что это основной ролик? Ведь на главной сцене много объектов(кнопки, ролики, слои).

Добавлено через 3 минуты
Если писать myMovieClip.ЕГЭ.addEvent то выходит ошибка:
Обращение не существующего свойства myMovieClip

А к какому объекту мне присвоить имя myMovieClip? Как присвоить имя ко всему ролику?

Добавлено через 1 час 1 минуту
Помогите пожалуйста!!!
Почему на главной сцене когда я прописываю код для кнопок(ege1, dop1), чтобы при нажатии на кнопку проигрывался определенный ролик, то появляется ошибка:
Цитата:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _fla::MainTimeline/clickListener1()
Код AS3:

stop();
 
ege1.addEventListener(MouseEvent.CLICK, clickListener1);
function clickListener1(event:MouseEvent): void{
 
            ege.gotoAndPlay(1);
 
}
dop1.addEventListener(MouseEvent.CLICK, clickListener2);
function clickListener2(event:MouseEvent): void{
 
                dop.gotoAndPlay(1);
}


samana 16.06.2015 14:10

Цитата:

где в окне программы (или на каком объекте) мне прописать myMovieClip, чтобы система понимала что это основной ролик
А к какому объекту мне присвоить имя myMovieClip? Как присвоить имя ко всему ролику?
Если вы подразумеваете под основным роликом - главную сцену, то доступ к ней можно получить через (root as MovieClip), но есть и другие варианты.

Цитата:

Почему на главной сцене когда я прописываю код для кнопок(ege1, dop1), чтобы при нажатии на кнопку проигрывался определенный ролик, то появляется ошибка
Значит какие-то объекты, к которым вы обращаетесь через код - ещё не существуют (например они находятся в другом кадре, либо не прописаны имена).

KaterinaRash 16.06.2015 14:25

Да основной ролик это главная сцена.
Будьте так любезны, напишите пожаааалуйста пример как получить доступ к
этой сцене и дать ей имя(MovieClip)!!!!!
Я сосвсем не шарю :((((

Добавлено через 5 минут
Я дала имена роликам (фрагментам роликов) dop и ege. На сцене у меня ключевой кадр, в нем расположен фрагмент ролика, в свойствах он назван dop (ну и ege соответственно).
К ним я и обращаюсь:
Код AS3:

ege1.addEventListener(MouseEvent.CLICK, clickListener1);
function clickListener1(event:MouseEvent): void{
 
            ege.gotoAndPlay(1);
 
}

Может как-то еще их надо обозвать или определить. Но беда в том, что я не знаю как!!!

samana 16.06.2015 14:31

Ей не нужно давать имя. Если вы пишете код в кадре сцены, то можете просто дописать
Код AS3:

this.stop() // сцена останавливает проигрывание
stop() // то же самое

this - это ссылка не текущий объект, в котором вы пишете код в данный момент. А так как вы пишете код в кадре сцены, то this - это и есть сцена. Если вы напишете this в кадре какого-то мувика, то this будет ссылаться на этот мувик.

Если вы пишете код в кадре какого-то мувика, то обратиться к сцене из него можно так:
Код AS3:

(root as MovieClip).play(); // сцена начинает проигрываться

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

KaterinaRash 16.06.2015 14:53

С именем сцены понятно!!!
А как мне обратиться к вложенным роликам dop и ege?
Система пишет ошибку на мой код
Цитата:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _fla::MainTimeline/clickListener1()
мой корявый код:
Код AS3:

this.ege1.addEventListener(MouseEvent.CLICK, clickListener1);
function clickListener1(event:MouseEvent): void{
 
            (ege as MovieClip).gotoAndPlay(1);
 
}

вообще можно так писать? или это полная ересь?:
(ege as MovieClip).gotoAndPlay(1);

ege - это ролик во 2 кадре.
Я хочу чтобы по кнопке он начал проигрываться. А он.....блин...:((((

Добавлено через 56 секунд
ПОМОГИТЕЕЕ!!! ПОЖАЛУЙСТА!!!

Добавлено через 27 минут
Я написала вот так:
Код AS3:

this.ege1.addEventListener(MouseEvent.CLICK, clickListener1);
function clickListener1(event:MouseEvent): void{
 
            this.gotoAndStop(this.currentFrame+1);

не знаю почему, но все работает!!! :)

Добавлено через 27 минут
Ошибка исчезла!!!

samana 16.06.2015 15:30

(ege as MovieClip) так писать просто нет смыла, так как ege у вас вроде не мувик, а кнопка даже.
Вообще as это привидение типов. Когда непонятно что это за объект, но мы хотим попробовать манипулировать им как каким-то конкретным классом, например мувиком.

Цитата:

ege - это ролик во 2 кадре.
Если мувик появляется только во втором кадре, то доступа в первом кадре к нему нет же.


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

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