2013-03-31 84 views
-2

首先,我是一名初學者。其次,請別人改變標題,因爲我想不出一個更好的標題。AS3 - 訪問未定義的屬性

這就是問題的所在:

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); 
} 
+0

你應該給我們的職能'makebtn'和'btntxt'代碼。這兩個問題之一更可能出現問題。另外,你是在時間線上還是在文檔類中編碼? – puggsoy

+0

@puggsoy請再次查看並幫助我 –

回答

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

很好,你已經設法解決這個問題,如果有一點提示。這就是所謂的完美之路:) – Vesper

0

您正試圖通過讓孩子和分配給它一個名稱,以使動態屬性。它不以這種方式工作。您可以使用getChildByName()並通過字符串調用您的函數,如btntxt("btnstart","Start");,或者您可以使用this[]構造手動將屬性添加到主類的動態MovieCkip。 this[newname]=button;

+0

對不起,我更改了我的'btntxt'功能。當我輸入這個時,它會給出一個錯誤:'function btntxt(target:String,txt:String):void {var button; button = getChildByName(target); ...'你如何將getChildByName放入我的函數中? –

+0

它應該以這種方式工作。什麼是錯誤? – Vesper

+0

輸出:TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。 \t at untitled1_fla :: MainTimeline/btntxt() \t at untitled1_fla :: MainTimeline/frame1() –

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; 
}