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

GBee 13.11.2011 00:19

Цитата:

Embed не подойдет, он FlashIDE юзает
Да хоть блокнот, почему не подойдет?

strangedk 13.11.2011 00:21

А с каких пор FlashIDE начал понимать теги Ebmed ?

Bgg 13.11.2011 00:23

C CS4.

noobuser 13.11.2011 00:23

Извините, я немного не сдержанный наверное. Просто реально на эту кнопку у меня ушёл весь день и хорошо когда хоть что-то начало проясняться и получаться. А по поводу ника, он и так не случайный, было бы больше знаний по as не было таких глупых топиков. Знаний мало - вот и рождаются подобные топики, единственное чем себя тешу, тем что он еще кому-нибудь поможет. 4 страницы....

noobuser 13.11.2011 00:29

про Embed оно мне конечно очень помогло бы, но для использования требует Flex SDK. есть смысл устанавливать ? Или всё не так просто ?

strangedk 13.11.2011 00:31

Цитата:

Сообщение от Bgg (Сообщение 1045637)
C CS4.

Клёво) не знал) спасибо))))

GBee 13.11.2011 00:33

А я думал все едино :о).

Ookami 13.11.2011 01:01

Цитата:

Сообщение от noobuser (Сообщение 1045640)
про Embed оно мне конечно очень помогло бы, но для использования требует Flex SDK. есть смысл устанавливать ? Или всё не так просто ?

После установки FlashDevelop && Flex SDK я отказался от использования Flash CS 5.5 (использую только для сборки swc с графикой, и то редко)
ИМХО смысл есть хотя бы для того чтоб выбрать для себя наиболее удобную среду разработки. Да и пашет ФД в разы шустрее по сравнению с Flash CS 5.5

Добавлено через 46 минут
Вот пример для размышления:
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author Ookami
        */

        public class Button extends Sprite
        {
 
                private var stateNorm:Sprite;
                private var stateOver:Sprite;
                private var stateDown:Sprite;
 
                /*
                * Конструктор класса
                */

                public function Button(spriteNorm:Sprite, spriteOver:Sprite, spriteDown:Sprite)
                {
                        /**
                        * Формирование тела кнопки
                        */

                        stateNorm = spriteNorm;
                        stateOver = spriteOver;
                        stateOver.visible = false;
                        stateDown = spriteDown;
                        stateDown.visible = false;
                        addChild(stateNorm);
                        addChild(stateOver);
                        addChild(stateDown);
                        /**
                        * Прослушка событий
                        */

                        addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
                        addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
                        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
                        addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
                }
 
                /*
                * Фокус мыши на кнопке
                */

                private function onMouseOver(event:MouseEvent):void
                {
                        stateNorm.visible = false;
                        stateOver.visible = true;
                        stateDown.visible = false;
                }
 
                /*
                * Потеря фокуса
                */

                private function onMouseOut(event:MouseEvent):void
                {
                        stateNorm.visible = true;
                        stateOver.visible = false;
                        stateDown.visible = false;
                }
 
                /*
                * Нажатие кнопки (начало)
                */

                private function onMouseDown(event:MouseEvent):void
                {
                        stateNorm.visible = false;
                        stateOver.visible = false;
                        stateDown.visible = true;
                }
 
                /*
                * Нажатие кнопки (завершение)
                */

                private function onMouseDown(event:MouseEvent):void
                {
                        stateNorm.visible = true;
                        stateOver.visible = false;
                        stateDown.visible = false;
                }
        }
 
}


noobuser 13.11.2011 01:53

хм.. ну я за себя рад, я сделал абсолютно тоже самое, за исключением того, что спрайты кнопок загружаются в конструкторе, а не передаются в качестве параметра. ОЧЕНЬ громоздко получилось если учесть что с SimpleButton кода вообще нет )

Добавлено через 3 минуты
небольшое уточнение, из за того что у меня есть еще и textField поверх всех этих спрайтов, то возникал небольшой касячок при обработке фокуса и нажатия мыши. А именно нажатие срабатывало только на текстовом поле. Я так понял это из за того что спрайты скрываются. Я сделал еще один спрайт который содержит прозрачный png размером ровно с мою кнопку и поместил этот спрайт поверх всех остальных. Так обработка нажатия мыши срабатывает корректно.

Ookami 13.11.2011 02:14

менее громоздко:
Код AS3:

package ui.buttons
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author Ookami
        */

        public class Button extends Sprite
        {
 
                private var stateNorm:Sprite;
                private var stateOver:Sprite;
                private var stateDown:Sprite;
 
                /*
                * Конструктор класса
                */

                public function Button(spriteNorm:Sprite, spriteOver:Sprite, spriteDown:Sprite)
                {
                        /**
                        * Формирование тела кнопки
                        */

                        stateNorm = spriteNorm;
                        stateOver = spriteOver;
                        stateDown = spriteDown;
                        addChild(stateNorm);
                        addChild(stateOver);
                        addChild(stateDown);
                        stateOver.visible = false;
                        stateDown.visible = false;
                        /**
                        * Прослушка событий
                        */

                        addEventListener(MouseEvent.MOUSE_OVER, onMouseEvent);
                        addEventListener(MouseEvent.MOUSE_OUT, onMouseEvent);
                        addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
                        addEventListener(MouseEvent.MOUSE_UP, onMouseEvent);
                }
 
                /*
                * Фокус мыши на кнопке
                */

                private function onMouseEvent(event:MouseEvent):void
                {
                        stateNorm.visible = false;
                        stateOver.visible = false;
                        stateDown.visible = false;
                        switch (event.type)
                        {
                                case MouseEvent.MOUSE_OVER:
                                {
                                        stateOver.visible = true;
                                        break;
                                }
                                case MouseEvent.MOUSE_OUT:
                                {
                                        stateNorm.visible = true;
                                        break;
                                }
                                case MouseEvent.MOUSE_DOWN:
                                {
                                        stateDown.visible = true;
                                        break;
                                }
                                case MouseEvent.MOUSE_UP:
                                {
                                        stateNorm.visible = true;
                                        break;
                                }
                        }
                }
 
        }
 
}

Цитата:

небольшое уточнение, из за того что у меня есть еще и textField поверх всех этих спрайтов, то возникал небольшой касячок при обработке фокуса и нажатия мыши. А именно нажатие срабатывало только на текстовом поле. Я так понял это из за того что спрайты скрываются. Я сделал еще один спрайт который содержит прозрачный png размером ровно с мою кнопку и поместил этот спрайт поверх всех остальных. Так обработка нажатия мыши срабатывает корректно.
Можно запретить чайлдам кнопки реагировать на мышь - так проще. Добавьте в конструктор класса
Код AS3:

                        mouseChildren = false;



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

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