2011-09-19 111 views
0
public class ColorLibrary { 
    private var _allColorCodes:Object; 

    public function ColorLibrary() { 
     init(); 
    } 

    private function init(){ 
     _allColorCodes = { 
      'black'  : '000000', 
      'white'  : 'FFFFFF', 
      'yellow' : '000000' 
     } 
    } 

    public function exchangeColor(colors:String){ 
     var colorArray:Array = colors.split(','); 
     for (var i:int = 0; i < colorArray.length; i++) { 
      _allColorCodes.getDefinitionByName(colorArray[i]); 
     } 

    } 

} 

任何想法如何將字符串轉換爲實例名?非常感謝〜! Strugglying這裏如何將字符串轉換爲對象名稱。 as3

+0

你想用你的函數(exchangeColor)完成什麼? – Mattias

回答

1

我不能見你爲什麼會想這樣做這樣的,但在這裏是一個函數,傳遞顏色列表(String)並返回十六進制代碼(Array)。如果一種顏色不存在,你會在陣列中迷路。我推薦使用ColorList.RED或至少ColorManager.getColor("red")

var colorList : Array = getColorList("black,yellow"); 

public function getColorList(colors : String) : Array 
{ 
    var result : Array = new Array(); 
    var colorArray : Array = colors.split(','); 

    for(var i : int = 0; i < colorArray.length ; i++) 
    { 
     if(_allColorCodes[colorArray[i]]) 
      result.push(_allColorCodes[colorArray[i]]); 
    } 

    return result; 
} 
+0

哇非常感謝,你的解決方案是我以後的一個,它完美的作品。想要投票你的解決方案,但我的聲譽是不夠的:(再次感謝您的幫助! – user775735

2

你已經有了一個對象那裏,所以你已經可以去:

_allColorCodes.black ..等

考慮到_allColorCodesprivate,你可以做一個非常可愛的小吸氣像這樣:

public function get colorCode():Object 
{ 
    return _allColorCodes; 
} 

然後只是有:

trace(colorCode.black); 
trace(colorCode.yellow); 

所有這一切說,我會做的是存儲對常量所有這些東西在一類像ColorCodes,就像這樣:

package 
{ 
    public class ColorCodes 
    { 
     public static const BLACK:uint = 0x000000; 
     public static const RED:uint = 0xFF0000; 
     public static const BLUE:uint = 0x0000FF; 
     public static const GREEN:uint = 0x00FF00; 
     public static const WHITE:uint = 0xFFFFFF; 
    } 
} 

,然後通過訪問它們:

trace(
    ColorCodes.RED 
); 

東西稍微更先進你可以做的就是利用Proxy和flash_proxy來覆蓋getProperty()方法。這意味着你可以去ColorLibrary.color直客蝙蝠:

package 
{ 
    import flash.utils.Proxy; 
    import flash.utils.flash_proxy; 

    public class ColorLibrary 
    { 
     private var _allColorCodes:Object; 

     public function ColorLibrary() 
     { 
      _allColorCodes = { 
       'black'  : '000000', 
       'white'  : 'FFFFFF', 
       'yellow' : '000000' 
      } 
     } 

     override flash_proxy function getProperty(name:*)* 
     { 
      return _allColorCodes[name]; 
     } 
    } 
} 

迴應評論:

好吧,你不需要在這裏使用getDefinitionByName,你可以簡單地使用括號通過解析字符串來訪問對象的值。

例子:

var object:Object = { 
    something: 2, 
    anotherThing: "something awesome" 
}; 

trace(object["something"]); // same as object.something 
trace(object["anotherThing"]); // same as object.anotherThing 

嘗試這樣的事情你exchangeColor()功能:

public function exchangeColor(colors:String):void 
{ 
    var colorArray:Array = colors.split(','); 

    for each(var i:String in colorArray) 
    { 
     trace(
      _allColorCodes[i] 
     ); 
    } 
} 
+0

感謝您的快速回復, 但我的情況是我有一串顏色 var color:String ='black,white,yellow'; 和我使用拆分轉換數組 然後使用此數組查找對象並返回十六進制數。 我想這樣做 _allColorCodes.colorArray [i], 但這是行不通的。有任何想法嗎? – user775735

+0

哇這很花哨,第一次看到這個。好的,我會試試看。非常感謝 – user775735

+0

請參閱編輯..希望有所幫助。 – Marty