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

XDiaBLo 30.11.2010 20:55

Как сделать обычную кнопку?
 
Я знаю про методики типа создания Sprite, и прикручивания всего нужного для имитации кнопки к нему, но я нашёл такой метод в интернете:
Код AS3:

import mx.controls.button;
private var asButton:Button = new Button();
asButton.x = 100;
asButton.y = 100;
asButton.id="actionscriptButton";
asButton.label = "ActionScript 3 Button";
addChild(asButton);

он у меня почему-то не работает. Как вообще можно чисто программным способом создать кнопку? Я работаю в FlashDevelop, c flex_sdk_4.1. Наверняка ведь есть способ сделать обычную простую кнопку с текстом, без всяких докручиваний Sprite.

КорДум 30.11.2010 20:58

Кнопка с текстом? Это Sprite, содержащий в себе SimpleButton с TextField сверху, у которого свойство selectable (так же его зовут?) поставлено в false. Я так давно нафигачил свой класс на основе своей кнопки.

goodguy 30.11.2010 21:07

Проще простого.
Код AS3:

var button:Button = new Button();
button.label = "Actionscript 3 Button";
button.addEventListener(ComponentEvent.BUTTON_DOWN, buttonClicked);

Работает как часы.

XDiaBLo 30.11.2010 21:43

Цитата:

Сообщение от goodguy (Сообщение 953739)
Проще простого.
Код AS3:

var button:Button = new Button();
button.label = "Actionscript 3 Button";
button.addEventListener(ComponentEvent.BUTTON_DOWN, buttonClicked);

Работает как часы.

Access of undefined property ComponentEvent.

Добавлено через 49 секунд
Цитата:

Сообщение от КорДум (Сообщение 953733)
Кнопка с текстом? Это Sprite, содержащий в себе SimpleButton с TextField сверху, у которого свойство selectable (так же его зовут?) поставлено в false. Я так давно нафигачил свой класс на основе своей кнопки.

Мда, ну это ведь тоже изврат, стандартной кнопки для использования из ActionScript нет нормальной?

goodguy 30.11.2010 21:48

Цитата:

Access of undefined property ComponentEvent.
Код AS3:

import fl.events.ComponentEvent;


Anton Riot 30.11.2010 21:52

стандартная кнопка есть в стандартных компонентах. Кроме этого, в них ещё много чего стандартного :)

КорДум 30.11.2010 21:56

Цитата:

Мда, ну это ведь тоже изврат, стандартной кнопки для использования из ActionScript нет нормальной?
Есть стандартная своя кнопка ;)

Dukobpa3 30.11.2010 22:12

Цитата:

Сообщение от XDiaBLo (Сообщение 953747)
Мда, ну это ведь тоже изврат

Ну че изврат сразу. У меня например тоже класс кнопки есть.

Называется скромно и со вкусом: UniversalButton. (Вообще типа универсальный батон, но можно и как космический читать:) кому как приятнее)
На самом деле является не кнопкой, а оберткой вида кнопки на любой DisplayObject.

Делается примерно так(это конструктор):
Код AS3:

UniversalButton(_source:DisplayObject = null, _simple:Boolean = false, _clickFunc:Function = null, _inactiveColor:int = 0x000000, _activeColor:int = 0xffffff)

в качестве сорса принимает любой DO сразу же на него навешивает всякие там "по наведению", "по клику" и прочее, если в этом сорце находит текстфилд с именем "title" - то работает с ним как с тайтлом. Если находит мувиклип двухкадровый с именем "icon" - то соответственно понимает что это икон.

имеет статусы активная/неактивная. татлу меняет цвет (берет из конструктора), а иконке переключает кадр (первый неактивный, второй активный)

_simple - это значит что простая кнопка, без тайтла и без иконки (влияет на эффекты при наведении и клике).

По клику вызывает функцию указанную в конструкторе, в качестве параметра в которую передает свой идентификатор.

В работе сей неказистый класс на 80 строк зарекомендовал себя отлично. И минус стопицот геморроя в отличии от работы со стандартными кнопками.

Psycho Tiger 30.11.2010 23:14

Это отвратительно что callback на клик задаётся явно.
Это значит что используя Вашу кнопку я не смогу вменяемо контролировать поток мышинных событий - тут запретить, тут продолжить, тут прекратить, а тут подписаться аж на 2 обработчика. Мне придется всегда занулять _clickFunc, и подписывать сам объект DisplayObject`а (предварительно, конечно, обёртывая его в спрайт если это не IneractiveObject - хотя это должна быть обязанность кнопки).

Dukobpa3 30.11.2010 23:22

Цитата:

Это отвратительно что callback на клик задаётся явно.
ну для каждой задачи свое решение. В тех моментах где я кнопку эту пользовал мне много обработчиков не требовалось. А кода экономит кучу. Вместо кучи подписок, я в родительском классе просто делаю функцию и всё ок.

А навешать дополнительно слушателей вам никто не запрещает даже с такой структурой. Так что комментарий по меньшей мере непонятен.

Данная кнопка перехватывает только маусОвер, маусКлик (рисует эффектик и передает в эту самую функцию свой идентификатор) и маусАут... собственно всё. Эти все обработчики событий занимаются только визуальной частью, если вам нужно на маусОвер повесить что-то функциональное - то без проблем, конфликтов не будет (есть подобная практика в работе с данным классом).

С кликом я вообще проблем не вижу. Редко когда мне нужно получить из MouseEvent.CLICK что-то окромя e.target - этот самый таргет я и принимаю в функции обработчике родительского класса.


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

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