2013-08-20 106 views
1

我有這段代碼讓玩家在完成拖放時在舞臺上出現一條消息。我希望在下一幀單擊按鈕時刪除這個精靈。有人可以幫助我的代碼?移除舞臺上的精靈as3

stage.addEventListener(Event.ENTER_FRAME, EntFrame); 
function EntFrame (e:Event):void 
    { 
    if (CntP1+CntP2+CntP3+CntP4+CntP5+CntP6+CntP7+CntP8 == 40) 
{ 
    var w:int = 400, h:int = 200; 
    var win:Sprite = new Sprite(); 
    win.name = "Mywin"; 
    addChild(win); 


// draw rounded rect with subtle vertical linear gradient fill and blue stroke 
    win.graphics.lineStyle(4,0x0077ff); 
    var mat:Matrix = new Matrix(); 
    mat.createGradientBox(w, h, 90 * (Math.PI/180)); 
    win.graphics.beginGradientFill(GradientType.LINEAR,[0xffffff,0xeeeeee],[1.00,1.00],[0,255],mat); 
    win.graphics.drawRoundRect(0,0,w,h,15,15); 

    // show center "YOU WIN!" text 
    var tf:TextField = new TextField(); 
    tf.autoSize = TextFieldAutoSize.LEFT; 
    tf.antiAliasType = AntiAliasType.ADVANCED; 
    tf.defaultTextFormat = new TextFormat("Arial, Verdana",36,0x454545,true); 
    tf.text = "Κέρδισες!"; 
    tf.selectable = false; 
    win.addChild(tf); 
    tf.x = w/2 - tf.width/2; 
    tf.y = h/2 - tf.height/2; 

    // add a drop shadow 
    var dropShadow:DropShadowFilter = new DropShadowFilter(3,45,0,.35,8,8,1,3); 
    win.filters = [dropShadow]; 

    // center the graphic 
    win.x = stage.stageWidth/2 - win.width/2; 
    win.y = stage.stageHeight/2 - win.height/2; 


} 

}

+2

你可能會有一堆他們要刪除,因爲你在每一幀添加一個新的。問題是你沒有提及它們的任何一個,所以要想讓它們調用removeChild()是很困難的。老實說,整個功能需要重寫,但是在你的問題中沒有足夠的信息來提供改進它的最佳方法的建議,以滿足任何總體目標。 –

+0

我在舞臺上有8個電影剪輯。玩家點擊它們,它們變得不可見,並且在不同位置的8個新電影剪輯變得可見。而已。當這個過程完成後,我希望文本消息出現,當玩家移動到下一個遊戲時,我想讓這個消息消失。我是新來的閃光燈,我是自學成才,我有很多困難。任何幫助表示讚賞。 – Marianna

回答

0

您的代碼不寫很好,需要重寫,以確保項目的再利用或可擴展性,但這裏出來的快捷方式。

使持有人雪碧,像

var messageHolder:Sprite = new Sprite(); 
addChild(messageHolder); 

所有消息添加到持有人在任何你喜歡的方式。當你需要擦除持有人的內容,下面的方法調用:

function clearHolderContents(holder:DisplayObjectContainer):void 
{ 
    if (holder.numChildren < 1) 
    return; // no need to continue this method if the target is empty 

    for (var i:int = holder.numChildren - 1; i >= 0; i--) 
     removeChild(holder.getChildAt(i)); 
} 

此法可疏通任何的DisplayObjectContainer =>的內容,使用它你messageHolder:

clearHolderContents(messageHolder); 

希望幫助!

+0

我很抱歉,但我需要一些更多的信息來了解你的意思。我應該在哪裏寫這個代碼?如果? – Marianna

+0

在創建消息之前,在開頭的某處添加一個持有人精靈。然後將消息添加到持有者(例如addChild()而不是messageHolder.addChild())。將函數clearHolderContents()從一開始複製粘貼到某處,然後在任何持有者(例如,messageHolder)的任意位置調用它。 –

+0

我想我做了你所說的任何事情,但現在我有這個錯誤:場景1,圖層'操作',第1幀,第165行\t 1136:不正確的參數數量。預計1.我會發布我的代碼告訴我我錯在哪裏。謝謝你幫助我。 – Marianna