Flash似乎与我搞砸了并且抛出了这个错误:
TypeError: Error #1006: value is not a function.
at sweg::Force/setTxt()[C:\Users\lamide97\Google Drive\OneDrive\COMP4\sweg\Force.as:459]
at Main/CheckOnStage()[C:\Users\lamide97\Google Drive\OneDrive\COMP4\Main.as:248]
at sweg::Force/removed()[C:\Users\lamide97\Google Drive\OneDrive\COMP4\sweg\Force.as:192]
at flash.display::DisplayObjectContainer/removeChild()
at Main/init()[C:\Users\lamide97\Google Drive\OneDrive\COMP4\Main.as:310]
at Main/Start()[C:\Users\lamide97\Google Drive\OneDrive\COMP4\Main.as:107]
似乎没有理由。我环顾了几个其他#1006 TypeError
个问题,但他们没有和我一样的问题。所以我决定自己修理它。令人惊讶的是,它不需要很长时间;解决方案是一个单一的跟踪声明。但我很难过为什么简单地追踪一个值就解决了它。
这是前提:我有一个Force
类,一旦添加到舞台上,就会在舞台上的文本框中设置文本的大小属性。它分配的文本框文本分别与Force的名称相对应。
以下是代码:
public function setTxt():void
{
switch (this.name)
{
case "Force 1" :
_magtText.text = "P";
_forceFormat.color = 0x33CCFF
//trace(_magt); If I uncomment this line then everything works
(this.parent as MovieClip).force1.text = String(Math.round(_magt * 100) / 100);
//line above is line 459
break;
case "Force 2" :
_magtText.text = "Q";
_forceFormat.color = 0xFF6600;
(this.parent as MovieClip).force2.text = String(Math.round(_magt * 100) / 100);
break;
case "Force 3" :
_magtText.text = "F";
_forceFormat.color = 0x003300;
(this.parent as MovieClip).force3.text = String(Math.round(_magt * 100) / 100);
break;
case "Force 4" :
_magtText.text = "A";
_forceFormat.color = 0xFF00FF;
(this.parent as MovieClip).force4.text = String(Math.round(_magt * 100) / 100);
break;
case "Tension 1" :
case "Tension" :
_magtText.text = "T";
_forceFormat.color = 0x003300;
(this.parent as MovieClip).force3.text = String(Math.round(_magt * 100) / 100);
break;
case "Tension 2" :
_magtText.text = "T`";
_forceFormat.color = 0xFF00FF;
(this.parent as MovieClip).force4.text = String(Math.round(_magt * 100) / 100);
break;
case "Resultant F" :
_magtText.text = "R";
_forceFormat.color = 0xFF0000;
(this.parent as MovieClip).resBox.text = String(Math.round(_magt * 100) / 100);
(this.parent as MovieClip).resAng.text = roundNum(_degrees.toFixed(3));
break;
default :
_magtText.text = "X";
}
_magtText.setTextFormat(_forceFormat);
}
我怀疑它与_magt
属性有关,因为我在Weight
子类中遇到类似问题,在此之前继承了Force
,问题似乎解决了在我添加了一些分号之后。
if (_magt >= 0)
{
drawForce();
}
else
{
drawForce(0x33CCFF, 0xCCCCCC, 0.3);
}
(this.parent as MovieClip).weightBox.text = roundNum(_magt.toFixed(3))
(this.parent as MovieClip).particle.mass = _magt;
//Line above throws a "Call to a possibly undefined method _magt" error. Doesn't work without the semi-colon.
(this.parent as MovieClip).massNum.text = roundNum(Number(_magt / 9.8).toFixed(3))
(this.parent as MovieClip).weightSlider.value = _magt;
//Line above throws the same error; also doesn't work without semi colon.
(this.parent as MovieClip).massSlider.value = _magt / 9.8
(this.parent as MovieClip).dragCalc(this);
我不知道为什么flash似乎认为_magt
属性(我声明为Number
)是一种方法。但是我确实有一个get magt
函数,但据我所知,我认为Flash不会将函数和属性相互混淆,因为它们不共享命名空间。
更奇怪的是,当我有一个名为"Resultant F"
的力量时,它的_magt
似乎没有问题,但所有其他力量都没有。
我最初的猜测是,某处某处,_magt
为NaN
。但是我知道这是不可能的,因为力被实例化为_magt
为147,这是跟踪幅度显示的内容,并且没有在其他地方分配新值。
我不知道这是否是一些低调的语法错误,因为我还是初学者,可能会有一些非常明显的东西,我没有看到。
虽然从技术上讲我已经解决了这个问题,但我想知道是什么导致了这个问题,因为我觉得它可能会在以后蔓延到我身上。
感谢您的阅读。