Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Timeline button (http://www.flasher.ru/forum/showthread.php?t=187332)

Nickolai 17.11.2012 21:13

Timeline button
 
У кнопки есть по идеи 4 состояния up over down hit. Как можно достучаться до каждого из них? Просто скажем если переменная равняется 4, то у кнопки button мы выбираем состояние hit, если переменная равняется 3, то down....

bav 18.11.2012 02:10

Напишите свой класс кнопки, который будет слушать события MouseEvent.ROLL_OVER, MouseEvent.ROLL_OUT, MouseEvent.MOUSE_DOWN, MouseEvent.MOUSE_UP. И куда можно будет добавлять различный контент. Так и получите доступ к состояниям кнопки.

Gaen 18.11.2012 03:23

Получить DisplayObject'ы с состояниями кнопки можно через ее свойства upState, overState, downState и hitTestState. Но при этом SimpleButton не позволяет программно устанавливать текущее состояние.
Для того, чтобы управлять состоянием кнопки программно, нужно, как сказал bav, написать свою реализацию кнопки на основе Sprite или MovieClip.

Nickolai 18.11.2012 15:46

пфф) Думал что будет совсем все просто. Куда мне писать свою реализацию кнопки?) Я же совсем не знаю ас) Можете хоть примерно подсказать как будет выглядить этот класс?

spirit2 18.11.2012 19:36

Что-то вроде:
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.text.TextField;
 
        public class MyButton extends Sprite {
                private var _myText:TextField;
 
                public function MyButton(){
                        super();
                        this.buttonMode = true;
                        this.mouseChildren = false;
 
                        _myText = new TextField();
                        addChild(_myText);
                        _myText.text = "я кнопка"
 
                        addEventListener(MouseEvent.MOUSE_OVER, buttonMouseOver);
                        addEventListener(MouseEvent.MOUSE_OUT, buttonMouseOut);
                        addEventListener(MouseEvent.MOUSE_DOWN, buttonMouseDown);
                        addEventListener(MouseEvent.MOUSE_UP, buttonMouseUp);
                }
                private function buttonMouseOver(e:MouseEvent):void{
                        _myText.text = "я кнопка"
                }
                private function buttonMouseOut(e:MouseEvent):void{
                        _myText.text = "я кнопка и на мне мышь"
                }
                private function buttonMouseDown(e:MouseEvent):void{
                        _myText.text = "я кнопка и я нажата"
                }
                private function buttonMouseUp(e:MouseEvent):void{
                        _myText.text = "я кнопка"
                }
        }
}


Nickolai 18.11.2012 21:46

Мужики, ребята)! А скажите как удалить кнопку из символа? Есть символ Main как удалить из него кнопку button?

bav 19.11.2012 01:18

Код AS3:

var child:DisplayObject = Main.getChildByName("button");
if (child)
    Main.removeChild(child);


PainKiller 19.11.2012 12:23

Цитата:

У кнопки есть по идеи 4 состояния up over down hit. Как можно достучаться до каждого из них? Просто скажем если переменная равняется 4, то у кнопки button мы выбираем состояние hit, если переменная равняется 3, то down....
не знаю зачем тут писать отдельный класс кнопки, достучаться до любого состояния SimpleButton можно так:
Код AS3:

my_btn.upstate = ... //присваивайте что хотите
my_btn.overstate = ...


Nickolai 19.11.2012 21:17

И что туда можно приписывать?

IAmNotASpamer 20.11.2012 00:07

Спрайт, например?

tsarapkabel 20.11.2012 00:27

Цитата:

Сообщение от Nickolai (Сообщение 1105120)
И что туда можно приписывать?

DisplayObject. Чтобы подобных вопросов не возникало, почитайте про SimpleButton.

Nickolai 20.11.2012 00:35

Код AS1/AS2:

b_page1 = visual.getChildByName("b_page1") as SimpleButton;
                        b_page1.upstate = true;

Выдает ошибку

tsarapkabel 20.11.2012 01:26

Там по ссылке даже пример написан:
Код AS3:

package {
    import flash.display.Sprite;
 
    public class SimpleButtonExample extends Sprite {
        public function SimpleButtonExample() {
            var button:CustomSimpleButton = new CustomSimpleButton();
            addChild(button);
        }
    }
}
 
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.display.SimpleButton;
 
class CustomSimpleButton extends SimpleButton {
    private var upColor:uint  = 0xFFCC00;
    private var overColor:uint = 0xCCFF00;
    private var downColor:uint = 0x00CCFF;
    private var size:uint      = 80;
 
    public function CustomSimpleButton() {
        downState      = new ButtonDisplayState(downColor, size);
        overState      = new ButtonDisplayState(overColor, size);
        upState        = new ButtonDisplayState(upColor, size);
        hitTestState  = new ButtonDisplayState(upColor, size * 2);
        hitTestState.x = -(size / 4);
        hitTestState.y = hitTestState.x;
        useHandCursor  = true;
    }
}
 
class ButtonDisplayState extends Shape {
    private var bgColor:uint;
    private var size:uint;
 
    public function ButtonDisplayState(bgColor:uint, size:uint) {
        this.bgColor = bgColor;
        this.size    = size;
        draw();
    }
 
    private function draw():void {
        graphics.beginFill(bgColor);
        graphics.drawRect(0, 0, size, size);
        graphics.endFill();
    }
}

Цитата:

Сообщение от Nickolai (Сообщение 1105146)
Код AS1/AS2:

b_page1 = visual.getChildByName("b_page1") as SimpleButton;
b_page1.upstate = true;


Вы присваиваете булево значение true, а надо присваивать DisplayObject. Например, в приведённом мной коде, DisplayObject'ом является Shape.

PainKiller 20.11.2012 11:57

да поспешил, правильно - upState и т.д. но тут в кодв видно

Gaen 20.11.2012 14:48

Мне кажется, автор хочет программно переводить кнопку в нажатое состояние, а не задавать внешний вид для этого состояния.

Nickolai 20.11.2012 22:01

Gaen, совершенно верно.

PainKiller 22.11.2012 13:04

я тут уже выкладывал пример кода, как можно программно задавать симплбаттону нажатые и прочие состояния: http://www.flasher.ru/forum/showthre...eButton&page=9


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

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