对象中的未定义方法?

时间:2011-01-30 15:10:32

标签: actionscript-3

当我想编译以下代码时出现错误...

当我尝试使用Filters类设置变量时,我得到了未定义的方法。

trace(filters.txt()); // returns undefined method

trace(filters); // returns [object Filters]

但我在其他脚本中使用同一个对象没有问题?

package player {
    import flash.display.Sprite;

    import filters.Filters;

    public class Time_bar extends Sprite {
        private var bar = null;

        public var color = null;
        public var _w = 0;
        public var _h = 0;
        public var _x = 0;
        public var _y = 0;

        public function Time_bar(){
            this.bar = new Sprite();
            addChild(this.bar);
        }

        public function cnstr(){
            this.bar.graphics.beginFill('0x'+this.color);
            this.bar.graphics.drawRect(0, 0, this._w, this._h);
            this.bar.graphics.endFill();
            this.bar.x = this._x;
            this.bar.y = this._y;
            this.bar.alpha = 0.75;
            this.bar.scaleX = 0;

            var filters = new Filters();
            trace(filters);
            trace(filters.txt());
            //filters.txt(this.bar);
        }

        public function progress(float){
            this.bar.scaleX = float;
        }
    }
}

Filters类看起来像这样:

package filters {
    import flash.display.Sprite;

    import filters.Filters_glow;

    public class Filters extends Sprite {
        private var Glow = new Filters_glow();

        public function txt(instance){
            Glow.color = '93fafe';

            instance.filters = [Glow.filter()];
        }

        public function loader(instance){
            Glow.color = '93fafe';
            Glow.alpha = 0.5;

            instance.filters = [Glow.filter()];
        }
    }
}

Filter_glow:

package filters {
    import flash.filters.GlowFilter;

    public class Filters_glow {
        public var color = '000000';
        public var alpha = 0.25; // range: 0-1
        public var blurX = 4; // range: 0-255; optimized values: 2,4,8,16 etc
        public var blurY = 4; // range: 0-255; optimized values: 2,4,8,16 etc
        public var strength = 1; // range: 0-255
        public var quality = 3; // range: 0-15
        public var inner = false;
        public var knockout = false;

        public function filter(){
            this.color = '0x'+this.color;

            return new GlowFilter(this.color, this.alpha, this.blurX, this.blurY, this.strength, this.quality, this.inner, this.knockout);
        }
    }
}

4 个答案:

答案 0 :(得分:1)

var _filters = new Filters();
_filters.txt(this.bar);

aparently过滤器是一个保留的属性名称..将过滤器更改为_filters后,错误消失了:)

答案 1 :(得分:0)

要验证过滤器对象上是否存在方法“txt”,您必须编写trace(filters.txt);。而是通过添加括号来执行带有缺少参数的txt方法。在执行时,它会尝试访问未定义的instance。我同意Matti的观点,但错误信息应该说明其他内容。

至于为什么filters.txt(this.bar);不起作用,我怀疑问题出在其他地方,你能包含调用代码和Filters_glow类吗?

答案 2 :(得分:0)

错误清晰可见。您没有将唯一必需的参数传递给函数txt。

public function txt(instance){
            Glow.color = '93fafe';

            instance.filters = [Glow.filter()];
        }

所以你只能通过传递一个实例来调用txt函数。类似的东西:

trace(filters.txt(YourObject));

我假设参数是您要应用过滤器的对象的实例或类似的东西。嗯,这是你的功能......

答案 3 :(得分:0)

尝试按如下方式修改代码,这可能有助于解决错误:

 //...
public class Filters extends Sprite {
private var Glow: Filters_glow;
    public function Filters(){
        Glow = new Filters_glow();
    }
    public function txt(instance: DisplayObject = null): Boolean{
        if(!instance){
            return false;
        }
        Glow.color = '93fafe';

        instance.filters = [Glow.filter()];
        return true;
    }
//...