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

-De- 14.11.2011 03:06

Если кляксу может заметить и понять, что это клякса, только тот, кто её специально ищет, то это не клякса, а сэкономил время. Нет даже стандарта, про который можно сказать, что он нарушен!
У SimpleButton нет фич, без которых просто никак иногда, например состояние "disabled". Это осложняет жизнь использующему её. Неиспользование stage таких недостатков не имеет.

Vektor 14.11.2011 09:25

Вот класс для создания и удаления кнопок.
Код AS3:

package {
        import flash.display.MovieClip;
        import flash.display.Stage;
        import flash.events.MouseEvent;
        public class Cbutton extends MovieClip {
                private var _bDown:Boolean=false;
                private var _oDownButon:Object=new Object  ;
                public function Cbutton(But,x:int,y:int) {
                        // constructor code
                        onButtonCreate(But,x,y);
                }
                private function onButtonCreate(But,x:int,y:int):void {
                        addChild(But);
                        But.stop();
                        But.x=x;
                        But.y=y;
                        But.addEventListener(MouseEvent.MOUSE_OVER, onMouseEvent);
                        But.addEventListener(MouseEvent.MOUSE_OUT, onMouseEvent);
                        But.addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
                }
                internal function onButtonDelete(But:MovieClip):void {
                        But.removeEventListener(MouseEvent.MOUSE_OVER, onMouseEvent);
                        But.removeEventListener(MouseEvent.MOUSE_OUT, onMouseEvent);
                        But.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
                        removeChild(But);
                }
                private function onMouseEvent(event:MouseEvent):void {
                        switch (event.type) {
                                case MouseEvent.MOUSE_OVER :
                                        if (_bDown&&_oDownButon==event.target) {
                                                _oDownButon.gotoAndStop(3);
                                        } else {
                                                event.target.gotoAndStop(2);
                                        }
                                        break;
                                case MouseEvent.MOUSE_OUT :
                                        event.target.gotoAndStop(1);
                                        break;
                                case MouseEvent.MOUSE_DOWN :
                                        stage.addEventListener(MouseEvent.MOUSE_UP, onMouseEvent);
                                        _oDownButon=event.target;
                                        event.target.gotoAndStop(3);
                                        _bDown=true;
                                        break;
                                case MouseEvent.MOUSE_UP :
                                        if (!(event.target is Stage)) {
                                                event.target.gotoAndStop(2);
                                        }
                                        stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseEvent);
                                        _bDown=false;
                                        break;
                        }
                }
        }
 
}

А здесь, вызов класса.
Код AS3:

package {
        import flash.display.MovieClip;
        import flash.display.Sprite;
        public class CLButton extends MovieClip {
                private var sClip:Sprite=new Sprite  ;
                private var _mcButton0:mcButton=new mcButton  ;
                private var _mcButton1:mcButton1=new mcButton1  ;
                private var _mcButton2:mcButton=new mcButton  ;
                private var _mcButton3:mcButton1=new mcButton1  ;;
                var _Cbutton0:Cbutton=new Cbutton(_mcButton0,0,0);
                var _Cbutton1:Cbutton=new Cbutton(_mcButton1,100,0);
                var _Cbutton2:Cbutton=new Cbutton(_mcButton2,100,100);
                var _Cbutton3:Cbutton=new Cbutton(_mcButton3,0,100);
                public function CLButton() {
                        // constructor code
                        addChild(sClip);
                        sClip.x=100;
                        sClip.y=100;
                        _Cbutton0.buttonMode=true;
                        sClip.addChild(_Cbutton0);
                        sClip.addChild(_Cbutton1);
                        sClip.addChild(_Cbutton2);
                        sClip.addChild(_Cbutton3);
 
                        _Cbutton0.onButtonDelete(_mcButton0);
                        //_Cbutton1.onButtonDelete(_mcButton1);
                }
        }
 
}


in4core 14.11.2011 15:07

9 страниц для темы не во флейме - это угар

PainKiller 14.11.2011 20:54

только что рисовал кнопку потомок симплбаттона вот вам образец класса:
Код AS3:

package core
{
        import flash.display.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.text.*;
        import flash.filters.*;
 
 
        public class Moduli_menu_btn extends SimpleButton
        {
                private var btnlabel:String;
                private const color:uint = 0x6D8FB3;
                private const colorText:uint = 0xF7F7F7;
                private const btnWigth:Number = 190;
                private const btnHeight:Number = 35;
                private var myFilters:Array;
 
                public function Moduli_menu_btn(btnlabel:String)
                {
                        this.width = btnWigth + 5;
                        this.height = btnHeight + 5;
                        this.btnlabel = btnlabel;
                            this.upState = drawBtnUp ();
                                this.overState = drawBtnOver ();
                                this.downState = drawBtnOver ();
                                this.hitTestState = drawBtnOver ();
 
                }
                private function btnTextField ():TextField
                {
                        var t:TextFormat = new TextFormat ("Calibri", 20, colorText, true);
                        t.align = TextFormatAlign.CENTER;
                        var btntext:TextField = new TextField ();
                        btntext.selectable = false;
                        btntext.text = btnlabel;
                        btntext.setTextFormat (t);
                        btntext.y = 3;
                        btntext.x = (btnWigth - btntext.width)/2;
                        return btntext;
                }
                private function drawBtnUp ():Sprite
                {
                        var bgUp:Sprite = new Sprite ();
                        bgUp.graphics.lineStyle (2, color);
                        bgUp.graphics.beginFill (color);
                        bgUp.graphics.drawRoundRect (0, 0, btnWigth, btnHeight, 3, 3);
                        bgUp.graphics.endFill ();
                        var text:TextField = btnTextField ();
                        bgUp.addChild (text);
                        return bgUp;
                }
                private function drawBtnOver ():Sprite
                {
                        var bgOver:Sprite = drawBtnUp ();
                        myFilters = new Array();
                        //myFilters.push(new GlowFilter(0xDAE1E8, 3, 18, 18));
                        myFilters.push(new DropShadowFilter ());
                        bgOver.filters = myFilters;
                        return bgOver;
 
                }
 
        }
 
}

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

Добавлено через 1 минуту
Цитата:

Сообщение от -De- (Сообщение 1045885)
У SimpleButton нет фич, без которых просто никак иногда, например состояние "disabled". Это осложняет жизнь использующему её. Неиспользование stage таких недостатков не имеет.

Нету??? А свойство enabled не пойдет???

Wolsh 14.11.2011 21:22

Как оно может "пойти", если нельзя задать соответствующее отображение?

PainKiller 14.11.2011 21:36

А это другое дело, хотя я лично просто создаю функцию такого типа:
Код AS3:

public function setIsChosen (chosen:Boolean):void
                {
                        this._isChosen = chosen;
                        if (this._isChosen)
                        {
                                this.upState = drawIsChosen ();
                                this.overState = drawIsChosen ();
                                this.downState = drawIsChosen ();
                                this.hitTestState = drawIsChosen ();
                        }
                        else
                        {
                                this.upState = drawStateUp ();
                                this.overState = drawStateOver ();
                                this.downState = drawStateOver ();
                                this.hitTestState = drawStateOver ();
                        }
 
                }

и делаю с кнопкой все что угодно

Vektor 15.11.2011 08:31

Цитата:

делайте так, и не трахайте мозг кадрами
Я не понял, а художник должен кодом, кнопки рисовать?

Wolsh 15.11.2011 14:46

Vektor, это сообщение было написано в разделе для художников? Автор к художникам обращался?))

PainKiller 16.11.2011 00:35

Цитата:

Сообщение от Vektor (Сообщение 1046130)
Я не понял, а художник должен кодом, кнопки рисовать?

А что вам мешает нарисовать картинку, экспортировать её в AS, создать её объект, и присвоить её нужному вам состоянию кнопки? Это к вопросу о рисовании. Так можно и анимированные состояния кнопок делать, присвоить каждому состоянию свой мувиклип и все.


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

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