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

AS3-Flash cs6 How to make numbers have a comma?

我正在制作一款游戏,当您点击怪物时,您的分数会获得 +1。但是当你的分数超过 1000 时,我希望它是 1,000 而不是 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();
}

不胜感激。

要用逗号显示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

    */
}

希望对您有所帮助。

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

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();,但任何一种方法都可以。转换在函数调用中看起来更整洁)

你可以这样做:

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

使用 NumberFormatter class:

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