доступ к созданным GUI элементам в файле определения класса в AS3 (Flash CS4) - PullRequest
0 голосов
/ 18 марта 2010

Я использовал графический интерфейс для создания прямоугольника, который я превратил в символ кнопки (SimpleButton). Затем я отредактировал кнопку так, чтобы она имела 4 разных состояния кнопки и текстовый слой сверху. Затем я создал файл определения класса для этого объекта, чтобы можно было динамически изменять текст метки (текстовый слой) при добавлении экземпляров этой кнопки на сцену.

Мне удалось создать и связать файл класса (DynamicButton.as) очень хорошо, но когда я пытаюсь получить доступ к текстовому полю, созданному на кнопке, я получаю ошибку:

"Доступ к возможно неопределенному свойству btnLabel через ссылку со статическим типом com.examples: DynamicButton."

когда я не мог заставить это работать, я решил попробовать добавить TextField непосредственно в файл определения класса, используя следующий код:

package com.examples 
{
    import flash.display.Sprite;
    import flash.display.SimpleButton;
    import flash.text.TextField;

    public class DynamicButton extends SimpleButton
    {
        public function DynamicButton(btnText:String="Click Me")
        {
            placeText();
            labelText.text = btnText;           
        }

        //property variables
            //create a text box to hold the button label
            private var labelText:TextField = new TextField();
            //create a displayObject to hold the text
            private var labelSprite:Sprite = new Sprite();      

        private function placeText():void {
            labelText.width = this.width;
            labelText.height = this.height;
            labelText.x = this.x;
            labelText.y = this.y;
            labelText.visible = true;
            labelSprite.addChild(labelText);
            this.parent.addChild(labelSprite);
        }

    }
}

Проблема в том, что я не могу добавить TextField в SimpleButton, так как это не экранный объект. Итак, я попытался добавить его к родителю простой кнопки (и я решил, что я просто поместил бы его точно над кнопкой). Но затем я получаю «нулевую ссылку на объект». ошибка.

Итак, у меня два вопроса

  1. есть ли способ получить доступ к элементам, созданным в графическом интерфейсе, из файла определения класса?
  2. Как мне добавить TextField к кнопке, используя только AS3 внутри моего файла определения класса?

1 Ответ

0 голосов
/ 22 марта 2010

Хорошо, это заняло несколько дней и некоторый самоанализ, но кажется, что у меня возникла проблема из-за того, что вы не можете добавить детей в SimpleButton. Я изменил свое определение класса для расширения MovieClip, затем создал функцию с именем «listen ()», которую я вызывал при создании объекта, добавляющего прослушиватели для состояний мыши «over», «down» и «out», чтобы подражать простой кнопке. Мне также пришлось поместить в конструктор команду stop (), чтобы каждая кнопка не повторяла циклически все состояния. Окончательное определение класса выглядит следующим образом:

package com.examples 
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class DynamicButton extends MovieClip
    {
        public function DynamicButton(btnText:String="Click Me")
        {
            stop(); 
            this.btnText_btn.text = btnText;
            listen();
        }//constructor  

        private function listen():void {
            this.addEventListener(MouseEvent.MOUSE_OVER,function(){
                    gotoAndStop(2);
                }//anon mouseover fcn
            );
            this.addEventListener(MouseEvent.MOUSE_DOWN,function(){
                    gotoAndStop(3);
                }//anon mousedown fcn
            );
            this.addEventListener(MouseEvent.MOUSE_OUT,function(){
                    gotoAndStop(1);
                }//anon mouseout fcn
            );          
        }
    }//class definition
}//package
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...