Flash CS5 + AS3 Временная шкала навигации - PullRequest
0 голосов
/ 18 февраля 2011

Новичок в CS5 и AS3, поэтому, если я совершаю фундаментальную ошибку, не стесняйтесь меня поправлять.

Я пытаюсь построить довольно длинную и сложную форму. Так что это потребует навигации по различным его частям. Я новичок во Flash и AS3, поэтому я начал с некоторых прототипов и получил две кнопки для перемещения вперед и назад по временной шкале. Моя проблема сейчас, когда я пытаюсь перенести это из области «Фрагмент кода» (правильный термин?) В мой основной файл ActionScript. Кнопки появляются, но нажатие на них не вызывает MouseEvent.

Итак, два вопроса. 1. Am I doing this right? 2. Why doesn't MouseEvent work when the code is in the .as file?

Form.fla - кадр 1, фрагмент кода

var form:Form = new Form();
addChild(form);

Form.as

package  
{
    import flash.display.MovieClip;
    import fl.controls.Button;
    import flash.events.MouseEvent;

    public class Form extends MovieClip 
    {
        private var nextButton:Button;
        private var prevButton:Button;

        public function Form() 
        {
            setupNavigation();
        }

        private function setupNavigation():void
        {
            nextButton = new Button();
            nextButton.label = "Next";
            // ... size and position code
            nextButton.addEventListener(MouseEvent.CLICK, moveForward);

            prevButton = new Button();
            prevButton.label = "Previous";
            // ... size and position code
            prevButton.addEventListener(MouseEvent.CLICK, moveBackward);

            addChild(nextButton);
            addChild(prevButton);
        }

        // Setup Mouse events
        private function moveForward(event:MouseEvent):void
        {
            nextFrame();
        }

        private function moveBackward(event:MouseEvent):void
        {
            prevFrame();
        }
    }
}

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Вы должны передать ссылку на свою основную временную шкалу в класс Form, используя setter function

var form:Form = new Form();
form.mainTimeline = this;
addChild(form);

в вашем классе Form (не фрагмент, класс правильныйтермин), добавьте следующую функцию и переменную:

private var _mainTimeline:Object;

public function set mainTimeline(mtl:Object):void
{
    _mainTimeline = mtl;
}

, затем в ваших функциях перемещения вперед / назад измените prevFrame () и nextFrame () на:

_mainTimeline.prevFrame();
_mainTimeline.nextFrame();

Существует несколькоспособы достижения того, чего вы пытаетесь достичь, то есть метод смены разделов.Ваш способ - это один из способов сделать это.Есть, может быть, несколько лучших подходов, но ваш подход здесь не является явно неправильным или что-то в этом роде.:)

0 голосов
/ 18 февраля 2011

Лучший и более чистый способ сделать это - использовать класс Document.Класс документа избавил бы от необходимости передавать ссылку на временную шкалу в класс Form, заставив класс Form действовать как сама временная шкала.

Вот как вы это сделаете.В вашем FLA-файле отмените выбор любого объекта, который вы выбрали, затем просмотрите панель свойств.Под заголовком «Опубликовать» вы увидите редактируемое текстовое поле с надписью «Class:» рядом с ним.Введите путь к вашему классу относительно вашего fla, который в данном случае будет просто именем класса, потому что у вас нет определенного пакета.Так что просто введите "Форма" там.Класс документа всегда должен расширять DisplayObjectContainer, который включает в себя MovieClip и Sprite, поэтому класс Form, который вы уже написали, должен работать отлично.

Как только это будет сделано, вы можете вызывать nextFrame () и prevFrame (), как вы это делали в своем вопросе, и это должно нормально работать.

...