AS3-Flash cs6如何让数字有逗号?

时间:2015-01-01 13:30:30

标签: actionscript-3 flash-cs6 dynamic-text

我正在制作一款游戏,当你点击怪物时你的得分为+1。但是当你的分数超过1000时,我希望它像1000而不是1000.我不知道如何做到这一点,因为我没有学到很多动作脚本。我已经在字体中嵌入了数字和标点符号。到目前为止,这是我的代码:

var score:Number = 0;

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

Monster.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);

function fl_TapHandler(event:TouchEvent):void
{
    score = score + 1;
    Taps_txt.text = (score).toString();
}

帮助将非常感谢。

4 个答案:

答案 0 :(得分:1)

这可能不是最优雅的方法,但我写了一个函数,它将返回用逗号格式化的字符串;

public function formatNum(str:String):String {
        var strArray:Array = str.split("");

        if (strArray.length >= 4) {
            var count:uint = 0;
            for (var i:uint = strArray.length; i > 0; i--) {
                if (count == 3) {
                    strArray.splice(i, 0, ",");
                    count = 0;
                }
                count++;

            }
            return strArray.join("");
        }
        else {
            return str;
        }
    }

我在一些非常大的数字上进行了测试,它似乎工作得很好。这个数字的大小没有上限,所以;

trace (formatNum("10000000000000000000"));

将输出:

  

10,000,000,000,000,000,000

所以在你的例子中,你可以这样使用它;

Taps_txt.text = formatNum(String(score));

(这是隐式而不是显式地使用toString();来转换类型,但是任何一种方法都没问题。在函数调用中,转换看起来有点整洁了)

答案 1 :(得分:1)

你可以这样做:

function affScore(n:Number, d:int):String {
    return n.toFixed(d).replace(/(\d)(?=(\d{3})+\b)/g,'$1,');
}
trace(affScore(12345678, 0)); // 12,345,678

答案 2 :(得分:1)

使用NumberFormatter类:

import flash.globalization.NumberFormatter;

var nf:NumberFormatter = new NumberFormatter("en_US");
var numberString:String = nf.formatNumber(1234567.89);
trace("Formatted Number:" + numberString);

// Formatted Number:1,234,567.89

答案 3 :(得分:0)

要用逗号显示score,您可以这样做:(注释在代码内)

var score:Number = 0;
var score_str:String;
var score_str_len:int;

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

Monster.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);

function fl_TapHandler(event:TouchEvent):void
{
    score = score + 1;

    score_str = score.toString();
    score_str_len = score_str.length;

    // here you can use score > 999 instead of score_str_len > 3
    Taps_txt.text = 
        score_str_len > 3 

        // example : 1780
        // score_str_len                        = 4
        // score_str.substr(0, 4 - 3)           = 1     : get thousands
        // score_str.substr(4 - 3)              = 780   : get the rest of our number : hundreds, tens and units
        // => 1 + ',' + 780                     = 1,780 : concatenate thousands + comma + (hundreds, tens and units)
        ? score_str.substr(0, score_str_len-3) + ',' + score_str.substr(score_str_len-3) 
        : score_str
    ;
    // gives :
    // score == 300   => 300
    // score == 1285  => 1,285
    // score == 87903 => 87,903

}

编辑:

要支持大于999.999的数字,您可以这样做:

function fl_TapHandler(event:MouseEvent):void
{
    score = score + 1;
    score_str = score.toString();   
    Taps_txt.text = add_commas(score_str);  
}

function add_commas(nb_str:String):String {

    var tmp_str:String = '';    
    nb_str = nb_str.split('').reverse().join('');

    for(var i = 0; i < nb_str.length; i++){
        if(i > 0 && i % 3 == 0) tmp_str += ',';
        tmp_str += nb_str.charAt(i);
    }

    return tmp_str.split('').reverse().join('');

    /*

        gives : 

            1234        => 1,234
            12345       => 12,345
            123456      => 123,456
            1234567     => 1,234,567
            12345678    => 12,345,678
            123456789   => 123,456,789
            1234567890  => 1,234,567,890

    */
}

希望能帮到你。