【问题标题】:accessing GUI-created elements in a class definition file in AS3 (Flash CS4)在 AS3 (Flash CS4) 的类定义文件中访问 GUI 创建的元素
【发布时间】:2011-01-29 01:33:30
【问题描述】:

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

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

“通过静态类型 com.examples:DynamicButton 的引用访问可能未定义的属性 btnLabel。”

当我无法让它工作时,我决定尝试使用以下代码直接在类定义文件中添加 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 添加到按钮?

【问题讨论】:

    标签: actionscript-3 flash-cs4


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2010-12-04
      • 2011-01-28
      • 2016-10-04
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      相关资源
      最近更新 更多