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

lovik 16.02.2012 01:27

Как Правильно обратиться к мувиклипу на сцене
 
Доброго дня суток
Столкнулся с такой проблемой, На основной сцене есть мувиклип.
В конце анимации появляется кнопка.
Вопрос Как с основной сцены обратится к этой кнопке ?? ибо на мои попытки он отвечает матом. ) а пытаю я, следующим образом
Код AS3:

mc_1.Btn_1

mc_1 лежит на основной сцене, основная сцена 1 кадр, в mc_1-70

ЗлОй ПрОграММер 16.02.2012 01:47

1) Пишите код в классах, если пишите не в них (так намного удобнее и лучше, поверьте)
2) Чтобы матершины на ваши попытки не было) нужно обращаться к кнопке, только тогда когда она появиться, а именно в конце анимации, как это сделать решайте сами, можно поставить условие

Srednas 16.02.2012 10:06

Цитата:

Сообщение от lovik (Сообщение 1063259)
Вопрос Как с основной сцены обратится к этой кнопке ?? ибо на мои попытки он отвечает матом. )

Цитата:

Сообщение от ЗлОй ПрОграММер (Сообщение 1063263)
1)нужно обращаться к кнопке, только тогда когда она появиться

А если кнопку добавить на сцену с самого начала клипа, но сделать её прозрачность равной нулю?
Затем в нужном кадре увеличить до 100%. Память будет занимать, конечно, но, думаю, не критично.

lovik 16.02.2012 10:40

Перенес я все это в классы.
Но почему то не хочет срабатывать лисенер и вызывать функцию, выглядит это примерно так
Код AS3:

package 
{
 
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
 
 
        public class myclass extends MovieClip
        {
 
 
                public function myclass()
                {
 
                        menu_bar.btn_1.addEventListener(MouseEvent.MOUSE_OVER, anim_play);
                        menu_bar.btn_1.addEventListener(MouseEvent.MOUSE_OUT, anim_play);
 
                        function anim_play (e:MouseEvent):void
                        {
                                trace(e);
                                menu_bar.btn_mc.play();
                        }


ЗлОй ПрОграММер 16.02.2012 12:30

в классе тоже придётся обращаться к кнопке когда она появиться

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

mc_1.addEventListener(Event.ENTER_FRAME, enterFrame);
private function enterFrame (e: Event):void
{
        if (mc_1.currentFrame == mc_1.totalFrames)
        {
            mc_1.btn_1.addEventListener(MouseEvent.MOUSE_OVER, anim_play); //если кнопка лежит в мувиклипе mc_1
            mc_1.btn_1.play();
        }
}
 
private function anim_play (e:MouseEvent):void
{
        trace(e);
        mc_1.btn_1.play();
}

Цитата:

А если кнопку добавить на сцену с самого начала клипа, но сделать её прозрачность равной нулю?
Затем в нужном кадре увеличить до 100%. Память будет занимать, конечно, но, думаю, не критично.
Можно и так но лучше кнопку добавлять в самом классе
Код AS3:

addChild(...);

как только mc1 достигнет последнего кадра
Код AS3:

if (mc_1.currentFrame == mc_1.totalFrames) ...


lovik 16.02.2012 12:34

Спс огромный.
Я в АС дуб бубом ((( .
Подскажите плиз Как правильно сделать проверку на какую кнопку навел мышкой ? чтоб не плодить 150 функций.

ЗлОй ПрОграММер 16.02.2012 13:38

каждой кнопке задавайте имя name = "button1"; и повесьте слушатель на каждую кнопку
потом в обработчике события можно узнать имя кнопки e.target.name
кстати можно и так анимацию кнопки запустить e.target.play();

lovik 16.02.2012 13:49

О великий гурру ))) Бью челом и низко кланяюсь ))

dimarik 16.02.2012 14:13

Код AS3:

 
const _buttonOne:SimpleButton = new SimpleButton();
const _buttonTwo:SimpleButton = new SimpleButton();
 
super.addChild(this._buttonOne);
super.addChild(this._buttonTwo);
 
super.addEventListener(MouseEvent.CLICK, this.handler_click);
 
function handler_click(event:Event):void {
    switch (event.target) {
        case this._buttonOne:
            // do button one action
            break;
 
        case this._buttonTwo:
            // do button two action
            break;
    }
}


gloomyBrain 16.02.2012 14:40

Можно switch-case реализовать побыстрее (правда, к теме это уже мало относится):

Код AS3:

const _buttonOne:SimpleButton = new SimpleButton();
const _buttonTwo:SimpleButton = new SimpleButton();
const _handlers:Dictionary = new Dictionary();
 
super.addChild(this._buttonOne);
super.addChild(this._buttonTwo);
 
_handlers[this._buttonOne] = this.handler_buttonOne;
_handlers[this._buttonTwo] = this.handler_buttonTwo;
 
super.addEventListener(MouseEvent.CLICK, this.handler_click);
 
function handler_click(event:Event):void {
    if (event.target in this._handlers) (this._handlers[event.target] as Function).call(null);
}



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

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