访问AS3中类定义文件中的GUI创建元素(Flash CS4)

时间:2010-03-18 14:42:41

标签: actionscript-3 flash-cs4

我使用GUI创建了一个矩形,我将其变成了一个按钮符号(SimpleButton)。然后我编辑了按钮,使其有4个不同的按钮状态和顶部的文本层。然后我为这个对象创建了一个类定义文件,这样我就可以在将这个按钮的实例添加到舞台时动态地更改标签文本(文本层)。

我能够很好地创建和链接类文件(DynamicButton.as),但是当我尝试访问我在按钮上创建的文本字段时,我收到错误:

  

“通过带有静态类型com.examples的引用访问可能未定义的属性btnLabel: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. 有没有办法从类定义文件中访问GUI创建的元素?
  2. 如何仅使用我的类定义文件中的AS3将TextField添加到按钮?

1 个答案:

答案 0 :(得分:0)

好的,花了几天时间和一些内省,但似乎我遇到的问题源于你无法将孩子添加到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