AS3 - 访问未定义的属性

时间:2013-03-31 09:09:24

标签: actionscript-3

首先,我是初学者。第二,请有人改变标题,因为我想不出更好的标题。

这就是问题所在:

makebtn(0, 150, true, "btnstart");
btntxt(btnstart, "Start");

我制作了两个函数,一个makebtnmakebtn( xpos, ypos, alignMiddle, instance name); 第二:btntxtbtntxt( target instance, displayed text);

function makebtn(xpos:Number, ypos:Number, alignMiddle:Boolean, newname:String):void
{
    var button:MovieClip = new btn();
    if(alignMiddle == true){
        xpos = stage.stageWidth / 2 - button.width / 2;
    }
    button.x = xpos;
    button.y = ypos;
    button.name = newname;
    trace("Success adding button - " + button.name);
    stage.addChild(button);
    button.gotoAndStop(4);
    button.useHandCursor = false;
}

function btntxt(button:MovieClip, txt:String):void
{
    button.btnText.text = txt;
    button.buttonMode = true;
    button.useHandCursor = true;
    button.addEventListener(MouseEvent.MOUSE_OVER,overListener);
    button.addEventListener(MouseEvent.MOUSE_OUT,outListener);
    button.addEventListener(MouseEvent.MOUSE_DOWN,clickListener);
    button.addEventListener(MouseEvent.MOUSE_UP,upListener);
}

我将我的按钮设为动画片而不是简单的按钮。

显示的问题是未定义属性的访问权限为btnstart。是时间不足导致问题还是什么?请帮忙!

告诉我我的信息是否太短。我确信听众工作正常。

我正在时间轴创建这些内容。

好吧,如果我将btntxt(button, "Start");放在makebtn函数中,那就可以了。

第二次编辑:

function makebtn(xpos:Number, ypos:Number, alignMiddle:Boolean, newname:String):void
{
var button:MovieClip = new btn();
if(alignMiddle == true){
    xpos = stage.stageWidth / 2 - button.width / 2;
}
button.x = xpos;
button.y = ypos;
button.name = newname;
trace("Success adding button - " + button.name);
stage.addChild(button);
button.gotoAndStop(4);
button.useHandCursor = false;
}

function btntxt(target:String, txt:String):void
{
var button;
button = getChildByName(target);
button.getChildByName("btnText").text = txt;
button.buttonMode = true;
button.useHandCursor = true;
button.addEventListener(MouseEvent.MOUSE_OVER,overListener);
button.addEventListener(MouseEvent.MOUSE_OUT,outListener);
button.addEventListener(MouseEvent.MOUSE_DOWN,clickListener);
button.addEventListener(MouseEvent.MOUSE_UP,upListener);
}

3 个答案:

答案 0 :(得分:1)

通过正确宣布儿童来解决:

function btntxt(target:String, txt:String):void
{
    var button:MovieClip = MovieClip(stage.getChildByName(target));
    var btnText:TLFTextField = TLFTextField(button.getChildByName("btnText"));
    btnText.text = txt;
    button.buttonMode = true;
    button.useHandCursor = true;
    button.addEventListener(MouseEvent.MOUSE_OVER,overListener);
    button.addEventListener(MouseEvent.MOUSE_OUT,outListener);
    button.addEventListener(MouseEvent.MOUSE_DOWN,clickListener);
    button.addEventListener(MouseEvent.MOUSE_UP,upListener);
}

答案 1 :(得分:0)

您正在尝试通过创建子项并为其指定名称来创建动态属性。它没有这种方式。您可以使用getChildByName()并通过字符串调用函数,例如btntxt("btnstart","Start");,也可以使用this[]构造手动将属性添加到主类的动态MovieCkip中。 this[newname]=button;

答案 2 :(得分:0)

var button:MovieClip;
for (var i=1; i<7; i++)
{
button = MovieClip(getChildByName("btn"+i));
button.addEventListener(MouseEvent.CLICK, objClick);
button.addEventListener(MouseEvent.ROLL_OVER, objOver);
button.addEventListener(MouseEvent.ROLL_OUT, objOut);
button.buttonMode = true;
}