我试图在舞台上填充动态文字字段,但我收到上述错误。我试图访问的文本字段存在于第180帧的舞台上。这个类扩展了SimpleButton并且它是一个超类,我有5个子类来扩展这个类。
我还尝试创建新文本而不是访问现有文本,我也有同样的错误。
package OOPGame{
import flash.display.SimpleButton;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.*;
public class Taste extends SimpleButton{
internal static var sweetNum = 0;
internal static var bitterNum = 0;
internal static var sourNum = 0;
internal static var saltyNum = 0;
internal static var umamiNum = 0;
internal static var recipeNum = 0;
internal static var ingNum = 0;
internal static var recipe:Array = new Array(3);
internal static var recipeOne:Array = new Array;
internal static var recipeTwo:Array = new Array;
internal static var recipeThree:Array = new Array;
internal static var recipeFour:Array = new Array;
internal static var recipeFive:Array = new Array;
protected var taste = "";
protected var rOiO:TextField;
public function Taste() {
addEventListener(MouseEvent.CLICK, onClick);
}
public function getRecipe(obj:Object, num:int):void{
recipe[num] = obj;
trace("recipe: " + recipe);
}
protected function onClick(event:MouseEvent){
if (DraggableIngredient.level == 4)
MovieClip(root).gotoAndStop(76, "Scene 2");
else {MovieClip(root).gotoAndStop(180, "Scene 2");
++recipeNum;
// trace(getRecipe());
if (recipeNum == 1){
for (var i:Object in recipe){
recipeOne[ingNum] = recipe[i];
++ingNum;}
recipeOne[ingNum] = taste;}
else if (recipeNum == 2){
for (i in recipe){
recipeTwo[ingNum] = recipe[i];
++ingNum;}
recipeTwo[ingNum] = taste;}
else if (recipeNum == 3){
for (i in recipe){
recipeThree[ingNum] = recipe[i];
++ingNum;}
recipeThree[ingNum] = taste;}
trace("this's your first recipe "+recipeOne);
//trace(recipeTwo);
//trace(recipeThree);
rOiO = parent.getChildByName("r1i1") as TextField;// here is the error
//rOiO.text = recipeOne[0].toString();
//rOiO = new TextField;
//parent.addChild(rOiO);
}
}
}
}
在另一个类中调用函数getRecipe只是为了填充数组配方并且它正在工作。 它给我以下输出:
this's your first recipe [object Orange],[object Apple],[object Tomato],Sweet
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at OOPGame::Taste/onClick()
at OOPGame::Sweet/onClick()
我的子类看起来像这样:
package OOPGame{
import flash.events.MouseEvent;
public class Sweet extends Taste{
public function Sweet() {
// constructor code
}
override protected function onClick(event:MouseEvent){
++sweetNum;
taste = "Sweet";
super.onClick(event);
}
}
}
提前致谢。任何帮助将不胜感激
答案 0 :(得分:0)
您的评论表示当您尝试从r1i1
Sweet
Taste
访问rOiO = parent.getChildByName("r1i1") as TextField;
时收到错误消息:
Sweet
问题出在该行代码执行之前,您正在离开MovieClip(root).gotoAndStop(180, "Scene 2");
存在的当前帧:
Sweet
我的假设是parent
的实例不存在于场景2的第180帧的显示列表中,在这种情况下,r1i1
为空。因此,错误实际上是引用父项,而不是r1i1
。
有很多方法可以解决这个问题。列表中的高位是不使用场景/帧来控制显示列表。由于我不知道您的应用程序的其余部分是什么样的,因此我很难引导您完成该任务。
虽然不推荐,但解决此问题的一种方法是保留对parent
的父剪辑的引用,并使用该剪辑代替r1i1
来访问它。如果做不到这一点,你应该能够找到一种更全面的方式来访问root
(也许是通过{{1}})。