ActionScript 3.0新手 - 对IF语句和文本框有疑问

时间:2014-01-21 13:36:26

标签: flash actionscript event-handling

假设我正在创建一个可以编辑角色技能的游戏。

目前,只有“耐力”有价值,即10分。你可以减少它,但我希望它停在5(作为0或负面耐力的英雄将是无意义)。

我有两个问题,但让我们先看一下代码:

//Defaults
var hero_endurance:int = 10;
var string_hero_endurance:String = String(hero_endurance);
box_hero_endurance.text = string_hero_endurance;
//Endurance Controls
function hero_endurance_decrease(MouseEvent):void {
    hero_endurance = hero_endurance-1;
    var string_hero_endurance:String = String(hero_endurance);
    box_hero_endurance.text = string_hero_endurance;
}
if (hero_endurance > 5){
button_hero_endurance_down.addEventListener(MouseEvent.CLICK, hero_endurance_decrease);
}

现在我的第一个问题:

此代码不起作用。有价值的内容会继续下去,就像if语句根本不存在一样。我该如何解决这个问题?

第二个问题:

也许您已经注意到,该功能始终通过以下方式刷新文本框中的重要内容:

var string_hero_endurance:String = String(hero_endurance);
box_hero_endurance.text = string_hero_endurance;

Actionscript 2.0甚至不需要这样的代码,您对有价值的所做的任何更改都会反映在文本框中。 有一种简单的方法可以做到这一点,还是我必须为每种情况使用此代码?

先谢谢!

2 个答案:

答案 0 :(得分:0)

回答你的第一个问题:在你的函数中创建一个变量,该变量保存一个整数值,表示你的英雄的耐力可以降到的最低数字,然后你需要检查当前的值,如下所示:

var currentEndurance:int = 10;
var lowestEndurance:int = 5;

if(currentEndurance != lowestEndurance)
{
//update your textbox
}else{
//both vars are equal so don't do anything
}

答案 1 :(得分:0)

它继续下降的原因是因为你的监听器设置不正确。即使在5以下的耐力下降后,您的事件监听器仍会继续触发。此外,您的事件处理函数声明未正确设置。我就是这样做的:

//Defaults
var hero_endurance:int = 10;
var string_hero_endurance:String = String(hero_endurance);
box_hero_endurance.text = string_hero_endurance;

//Endurance Controls
function hero_endurance_decrease(event:MouseEvent):void {
    hero_endurance = hero_endurance-1;
    var string_hero_endurance:String = String(hero_endurance);
    box_hero_endurance.text = string_hero_endurance;

    removeEnduranceListener();
}

// removes the endurance listener when needed
function removeEnduranceListener():void {
    if (hero_endurance <= 5){
        button_hero_endurance_down.removeEventListener(MouseEvent.CLICK, hero_endurance_decrease);
    }
}

// adds the endurance listener when needed
function addEnduranceListener():void {
    if (hero_endurance > 5){
        button_hero_endurance_down.addEventListener(MouseEvent.CLICK, hero_endurance_decrease);
    }
}

addEnduranceListener();  // add the endurance listener (function adds if needed)

我上面代码中最重要的一点是,无论你在哪里允许增加耐力,你都需要添加对addEnduranceListener函数的调用,以便再次注册降低其耐力的监听器,并使用我的代码作为一个模板,您可以以类似的方式创建功能,增加耐力,并在耐力达到10时对添加耐力功能进行注销。