2016-06-10 102 views
0

这个问题已经有在工作答案:Weird graphical bug in > AS3?颜色基于距离

我试图在AS3一个简单的瓷砖照明系统和我遇到的问题是,我不知道如何使用十六进制颜色代码

根据距离来改变颜色继承人的颜色代码改变部分:

for (var i:int = 0; i < buttons.length; i++) { 
    lightFact = getDistance(lightSource, buttons[i]) 
    colorTransform2.color = 0x000000 
    DisplayObject(buttons[i]).transform.colorTransform = colorTransform2; 
} 

如果您无法从函数名称中找出它,则lightFact是来自lightSource的距离。

+0

那么你的问题的颜色计算或距离计算?大概前者是因为你的代码已经被硬编码了,但是清楚的说明会很好。如果你想看到一些调整亮度/黑暗的代码,请参阅[本示例](http://www.veryinteractivepeople.com/?p=323)或[this one](http://stackoverflow.com/questions/) 2258800 /如何-可以-I-计算-色调-对的一给定 - 己色合动作-3) – BadFeelingAboutThis

回答

2

我不确定这段代码的最终目标是什么,但我们现在就去。

getDistance()应该返回一个数字值。下一步是创建一个将数字编码为颜色的函数或算法。这可能是只设置RGB颜色等于远处的R(在255设置一个上限)或许多if - else之类的语句:

if(lightFact < XValue) 
{ 
    colorTransform2.color = 0xFF0000; 
} 
else if(lightFact < YValue) 
{ 
    colorTransform2.color = 0x00FF00; 
} 
else 
{ 
    colorTransform2.color = 0x0000FF; 
} 

或任何其它更复杂的编纂你可能会喜欢。无论选择哪种编码方式,都需要某种逻辑来检查lightFact的值,并根据它(以及您可能具有的其他变量)进行计算或决定将不同的值设置为colorTransform2.color。否则colorTransform.color将始终为0x000000(黑色/关闭)。