Пользовательский скин Button во Flash CS5 - PullRequest
0 голосов
/ 04 августа 2011

Утро всем

Я не знаю, почему это не так просто достичь! Вот и мы:

В моем чистом проекте Flash CS5 AS3 мне нужно сделать несколько кнопок. Много разных видов кнопок, которые имеют разные наборы скинов. Совершенно разные.

Итак, брать компонент Button и менять скины в Symbol недостаточно, потому что это меняет все кнопки. И мне нужно много разных.

Мы все знаем, как заново обработать основной компонент Button, что приводит к изменению всех кнопок.

Кто-нибудь знает, как сделать отдельные настройки для кнопки или что-то подобное?

Приветствия

Rich

1 Ответ

0 голосов
/ 04 августа 2011

Не уверен на 100%, что вы имеете в виду .. Если вам нужно иметь несколько разных кнопок, почему вы не можете просто создать несколько кнопок с помощью функции Преобразовать в символ из контекстного меню при выборе объектов в пользовательском интерфейсе?

Если вам нужно поддерживать какой-либо тип функциональности для этих кнопок, тогда я могу порекомендовать инкапсулировать все это в класс, имеющий свойство skin:SimpleButton. Что вы можете сделать здесь, так это установить сеттер для скина, который применяет слушателей событий или что-то подобное:

public function set skin(btn:SimpleButton):void
{
    btn.addEventListener(MouseEvent.CLICK, _someFunc);
}

Все, что вам действительно нужно будет сделать, это либо создать несколько классов для каждой из ваших разных кнопок, которые задают обложку для использования в конструкторе:

public function SomeButton()
{
    skin = new MyLibraryButton();
}

Или сделать это на лету:

var button:MyButton = new MyButton();
button.skin = new MyLibraryButton();

Это то, что вы преследовали?


Вот более полный пример того, что я описываю выше:

package
{
    import flash.display.SimpleButton;
    import flash.events.MouseEvent;

    public class MyButton extends Object
    {
        // Properties
        private var _skin:SimpleButton;

        /**
         * Defines the button skin to use
         * @param btn Reference to an instance of SimpleButton
         */
        public function set skin(btn:SimpleButton):void
        {
            _skin = btn;

            btn.addEventListener(MouseEvent.CLICK, _click);
        }

        /**
         * Called when the skin (button) has been clicked
         * @param e MouseEvent.CLICK
         */
        private function _click(e:MouseEvent):void
        {
            trace("Button was clicked");
        }

        /**
         * Getters
         */
        public function get skin():SimpleButton{ return _skin; }
    }
}
...