2011-09-19 109 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