2012-08-28 29 views
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我的按钮中的一个?

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

我试图用上面的代码,但我得到一个错误#1009:无法访问空对象引用的属性或方法。

+0

我不使用FL UI组件真的想知道,但我不要认为有“skinClass”属性。尝试使用“upSkin”或“overSkin”或“downSkin”或“selectedUpSkin”等 – BadFeelingAboutThis

回答

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)); 
+0

代码与我上面发布的代码相同,但我仍然得到相同的错误 – Mirage01

+0

更新了我的答案 – Haronious

+0

当我将函数传递给button1 .setStyle(“skinClass”,pickRandomByChance(tiles).item);它给了我同样的错误,但是当我把它分配给一个对象var pick:Object = pickRandomByChance(tiles);并将函数传递给button1.setStyle(“skinClass”,picked.item);它工作得很好。如果我有很多按钮,我是否需要创建许多对象才能摆脱错误或者有其他方法? – Mirage01