当我想编译以下代码时出现错误...
当我尝试使用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);
}
}
}
答案 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;
}
//...