2013-08-20 44 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