0

スキンをランダム化するコードがあります

private var tiles:Array = [
            {"item":"Skin1", "chance":70 },
            {"item":"Skin2", "chance":5 },
            {"item":"Skin3", "chance":10 },
            {"item":"Skin4", "chance":10 },
            {"item":"Skin5", "chance":5 }
        ];


public function pickRandomByChance(options:Array):Object{
            var copy:Array=[];
            for (var i:int = 0; i < options.length; i++) {
                  copy.push( { "item":options[i].item, "chance":options[i].chance } );
            }
            var range:Number = 0;
            for (i = 0; i < copy.length; i++){
                  range += copy[i].chance;
                  if (i > 0)
                  copy[i].chance += copy[i - 1].chance;
            }

            var pick:Number = Math.floor(Math.random() * range);

            for (i = 0; i < copy.length; i++){
                 if (pick <= copy[i].chance)
                 return copy[i];
            }
    return null;
}

私の質問は、setStyle を使用してこれらのスキンをボタンの 1 つに割り当てるにはどうすればよいですか?

button1.setStyle("skinClass", pickRandomByChance(tiles).item);

上記のコードを使用しようとしましたが、エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。

4

1 に答える 1

0

あなたの関数はnullを返していると思います(設定時に、本質的に呼び出し元のnull.itemのスタイルを設定します)。私はこのコードをテストしていません。うまくいくと確信しています。試してみてください。私の意見では、それは少し単純です。

public function pickRandomByChance(options:Array):Object{
    var weightedArray:Array = [];
    var range:Number = 0;
    for each(var tile:Object in options){
        for(var x = 0; x < tile.chance; x++){
            weightedArray.push(tile);
        }
        range += tile.chance;
    }
    return(weightedArray[Math.floor(Math.random() * range)].item);
}

編集:あなたの肌の配列を見たので、エラーが見つかったと思います。引用符なしでスキン名を試してください:

var tiles:Array = [ {"item":Skin1, "chance":70 },
                    {"item":Skin2, "chance":5 },
                    {"item":Skin3, "chance":10 },
                    {"item":Skin4, "chance":10 },
                    {"item":Skin5, "chance":5 } 
                  ];

編集: 上記の改訂されたリターンを参照し、以下に示すようにスキンも適用します。

button1.setStyle("skinClass", pickRandomByChance(tiles));
于 2012-08-29T00:18:13.957 に答える