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

Oli Short 07.01.2010 17:14

Создание динамических кнопок
 
Здравствуйте. Создаю динамическую кнопку

Код AS3:

//1 слой (рисунок кнопки)
 var column:columnClass = new columnClass();
 column.x = 310;
 column.y = 60 + 35 * i;
 addChild(column);
 
//2 слой - текст кнопки
 var txtField:TextField = new TextField();
 txtField.textColor = 0xFFFFFF;
 txtField.htmlText = '<b>'+sortID+'.</b>  '+vkID+'';
 txtField.x = 320;
 txtField.y = 65 + 35 *i;
 addChild(txtField);
 
 //3 слой подложка (прозрачный фон)
 var casper_column:casper_columnClass = new casper_columnClass();
 casper_column.x = 310;
 casper_column.y = 60 + 35 * i;
 //casper_column.name = ''+vkID+'';
 addChild(casper_column).name = ''+vkID+'';

но что то слишком громоздко получается и не красиво. Возможно есть вариант полегче? Cпасибо

dmitriev 07.01.2010 17:40

Можно создать кнопку руками и указав ей Linkage описать её в отдельном классе. Так не придётся создавать каждый раз экземпляры подложки, текстФилда и прочего.

Oli Short 07.01.2010 23:11

вот нашел что нужно
Код AS3:

package {
 
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
 
    public class MyButton extends SimpleButton {
 
        public static const OVER_COLOR:uint = 0x999999;
        public static const UP_COLOR:uint = 0x666666;
        public static const DOWN_COLOR:uint = 0x886600;
 
        private var _label:String;
 
        public function MyButton(label:String):void {
            _label = label;
 
            downState = createSprite(DOWN_COLOR);
            overState = createSprite(OVER_COLOR);
            upState = createSprite(UP_COLOR);
            hitTestState = overState;
        }
 
        private function createSprite(color:uint):Sprite {
            var s:Sprite = new Sprite();
            s.graphics.beginFill(color);
            s.graphics.drawRoundRect(0, 0, 100, 18, 10, 10);
            s.graphics.endFill();
            var lab:TextField = createLabel();
            lab.x = Math.round(s.width * .5 - lab.width * .5);
            lab.y = Math.round(s.height * .5 - lab.height * .5);
            s.addChild(lab);
            return s;
        }
 
        private function createLabel():TextField {
            var fmt:TextFormat = new TextFormat("_sans", 11);
            var tf:TextField = new TextField();
            tf.selectable = false;
            tf.mouseEnabled = false;
            tf.autoSize = TextFieldAutoSize.LEFT;
            tf.defaultTextFormat = fmt;
            tf.text = _label;
            return tf;
        }
    }
}

создаю на главной

Код AS3:

import files.btnClass
 
var btn:MyButton = new MyButton('text btn');
 
btn.x = 10;
btn.y = 10;
 
addChild(btn);

пишет что
Цитата:

1046: Type was not found or was not a compile-time constant: MyButton.
1180: Call to a possibly undefined method MyButton.
вроде все делаю правильно. подскажите пожалуйста в чем моя ошибка. спасибо

Alex Lexcuk 08.01.2010 01:21

ну и...
скрипт для кнопки записали в файл MyButton.as и сунули его в папку с fla файлом.
Если не работает, то плющит Adobe Flash.

Oli Short 08.01.2010 01:24

прошу прощения

имя класса и имя .as не совпадало. спасибо!

warez_men 12.01.2010 18:12

Вопрос такой у меня есть кнопка (стандартная) в библиотеке. Я дал ей имя (BtMenu) также тексту тоже присвоил имя (caption) и хочу текст на кнопки менять из другого класса подскажите как это сделать?

dmitriev 12.01.2010 19:36

В другом классе должна быть ссылка на это кнопку, создавайте её когда добавляете кнопку на сцену. Или, если вы добавили на сцену руками, то она будет доступна по instance name в классе-родителе.

warez_men 12.01.2010 21:02

Клас кнопки
Код AS3:

package Src.buttons{
 
        import flash.display.*;
        import flash.text.*;
        import flash.events.Event;
 
        public class btMenu extends flash.display.SimpleButton {
 
                public function btMenu() {//
                        //trace("1 ");
 
//                        (this['caption'] as TextField).text = "sd";_caption;
 
                }
        }
}

основной класс
Код AS3:

 
package Src{
 
        import flash.display.*;
        import flash.events.Event;
        import flash.text.*;
        import Src.buttons.*;
 
        public class GameMenu extends Sprite {
 
                private var GameName:String;
                private var GameNameText:TextField;
 
                public var DisplayWidth:uint;
                public var DisplayHeight:uint;
                private var btPlay: btMenu;
 
                public function GameMenu() {
                        DisplayWidth = 700;//stage.stageWidth;
                        DisplayHeight = 525;//stage.stageHeight;
 
                        GameName = "Game";
 
                        GameNameText = new TextField();
 
                        var format:TextFormat = new TextFormat();
                        format.font="Comic Sans MS";
                        format.size=50;
                        GameNameText.defaultTextFormat=format;
 
                        GameNameText.text = GameName;
                        with (GameNameText) {
                                textColor=0x99cc00;
                                autoSize = TextFieldAutoSize.LEFT;
                                selectable = false;
 
                                x=(DisplayWidth/2) - (textWidth/2);
                                y=20;
                        }
 
                        btPlay = new btMenu();
 
                        btPlay.x = (DisplayWidth/2) - (btPlay.width/2);
                        btPlay.y = 200;
 
 
 
                        addChild(btPlay);
                        addChild(GameNameText);
 
 
                }
 
 
        }
}


dmitriev 12.01.2010 21:50

Классы следует называть с прописной.

Определите свойство btPlay как публичное. В любой другой класс передавайте ссылку на класс GameMenu и обращайтесь к его свойству. Всё просто же.

warez_men 12.01.2010 22:07

Да вот ничего не выходит. Могу кинуть проект.

Добавлено через 11 минут
Вообще проблема в том что я не вижу текст у кнопки даже в самом классе кнопки...


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

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