0

我目前在舞台上有几个电影剪辑和按钮,它们可以做不同的事情。我有一个按钮,可以“攻击”敌方玩家并降低他的HP。这个按钮有一个点击事件监听器,当它被激活时,它会通过一个 IF 语句并根据他的生命值有多低来改变他的生命值条等。当健康达到 0 时,我想将整个屏幕转换到另一个结束屏幕。

我尝试使用 .visible 使我的所有其他对象变得不可见并且有效,但是将我单击以攻击的实例按钮设置为不可见将不起作用。我也尝试过 removeChild,它不会删除按钮,并且 gotoAndPlay/Stop 到未来的帧给了我一个空对象引用。

这是该帧中特定按钮的代码。

stop();

OSButton.addEventListener(MouseEvent.CLICK, OSAttack);

function OSAttack(event:MouseEvent):void
{
    var health1:int = parseInt(RegHealth.text);
    health1 = health1 - 1000;


        if(health1 == 9000 || health1 == 8000 || health1 == 7000 || health1 == 6000 || health1 == 5000
       || health1 == 4000 || health1 == 3000 || health1 == 2000 || health1 == 1000 || health1 ==0){
        REGHPBAR.play();
    }


    RegHealth.text = health1.toString();


    if(health1 <= 0){
        ////// WHAT CODE DO I PUT HERE? 
    }


}
4

1 回答 1

0

尝试对变量和函数名称使用带有前导小写字符的格式,对类名称使用前导大写字符。这是一种常见的做法,可以让您更轻松地阅读代码。

删除按钮时,您也应该删除侦听器。(查找并阅读有关弱引用的信息,因为您可能决定开始使用它)。

所以你的 AS3 可能看起来像这样:

oSButton.addEventListener(MouseEvent.CLICK, oSAttack);

//or using weak referencing
//oSButton.addEventListener(MouseEvent.CLICK, oSAttack, false 0, true);

function oSAttack(event:MouseEvent):void
{
var health1:int = parseInt(regHealth.text);
health1 = health1 - 1000;

if(health1 == 9000 || health1 == 8000 || health1 == 7000 || health1 == 6000 || health1 == 5000 || health1 == 4000 || health1 == 3000 || health1 == 2000 || health1 == 1000 || health1 ==0){
REGHPBAR.play();
}


regHealth.text = health1.toString();

if(health1 <= 0){
////// remove the button
oSButton.removeEventListener(MouseEvent.CLICK, oSAttack);
oSButton.parent.removeChild(oSButton);

//if you no longer need the button you can null it
oSButton = null;
}

}
于 2012-11-28T07:46:05.900 回答