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

Andriy 27.09.2010 18:24

Как обратиться к символу из самого символа?
 
Создал символ, разместил его на сцене, присвоил имя (but_1) и поставл галочку экспорта для АС. При попытке запустить среда (CS5) виснет! В самом символе написан код (задачка - анимированная кнопка, необходимо ее анимацию запускать\останавливать из самой себя):
Код AS3:

import flash.display.MovieClip;
 
var t:Boolean;
 
var but:MovieClip = new but_1; // < вот этот момент, подскажите
 
but.buttonMode=true;
 
//далее идёт блок объявления слушателей для событий
 
    but.addEventListener(MouseEvent.MOUSE_OVER, rollover);
        but.addEventListener(MouseEvent.MOUSE_OUT, rollout);
        but.addEventListener(Event.ENTER_FRAME, enter_);
        but.addEventListener(MouseEvent.MOUSE_DOWN, click_);
 
        function click_(e:MouseEvent):void
        {
        //сюда пишем что будет происходить по клику
        //trace("click");
        }
 
        function rollover(e:MouseEvent):void
        {
        t=true;
        }
 
        function rollout(e:MouseEvent):void
        {
        t=false;
        }
 
        function enter_(e:Event):void
{
        if (t == true){
        e.target.nextFrame();
        }
        else{e.target.prevFrame();}
}


andrew911 27.09.2010 18:46

1 Что значит виснет, может просто ничего не отображается?

2 Если вы создали и разместили его на сцене, зачем создаете его еще раз
var but:MovieClip = new but_1; // < вот этот момент, подскажите
(правильнее new but_1());

Если это и есть создание, то тут нет его добавления на сцену.

alatar 27.09.2010 19:03

Если вы наваяли это в кадрах самого клипа, то не удивительно, что у вас плеер виснет. Вы добавили клип на сцену, он тут же автоматом создал свою копию (не добавляя ее в дисплейлист), копия в свою очередь создала еще одну копию, ну и т.д.

Добавлено через 4 минуты
если собираетесь и дальше писать в кадрах...
Код AS3:

import flash.display.MovieClip;
 
var t:Boolean;
 
buttonMode=true;
 
//далее идёт блок объявления слушателей для событий
 
    addEventListener(MouseEvent.MOUSE_OVER, rollover);
    this.addEventListener(MouseEvent.MOUSE_OUT, rollout); //или так
    addEventListener(Event.ENTER_FRAME, enter_);
    addEventListener(MouseEvent.MOUSE_DOWN, click_);
 
    function click_(e:MouseEvent):void
    {
    //сюда пишем что будет происходить по клику
    //trace("click");
    }
 
    function rollover(e:MouseEvent):void
    {
    t=true;
    }
 
    function rollout(e:MouseEvent):void
    {
    t=false;
    }
 
    function enter_(e:Event):void
{
    if (t) //переменная у вас и так булевская, зачем ее сравнивать с true?
    {
    e.currentTarget.nextFrame(); //или mouseChildren = false, тогда можете и target использовать
    }
    else{e.currentTarget.prevFrame();}


Andriy 26.10.2010 18:53

Большое спасибо!


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

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