您可以使用支持种子的随机值生成器,这样您就可以返回相同的颜色。至于颜色,您可以构建它 - 通过 randomValue * 0xFFFFFF,其中 randomValue 介于 0 和 1 之间。并排除接近的值(颜色)。
第二个选项:使用步骤 - 0xFFFFFF / 200 构建 200 种颜色的调色板,并使用预定义的逻辑随机播放调色板,因此您将拥有相同的颜色。
第三种选择:至于真正不同的颜色,您可以在每个频道中使用big jumps。示例:0xFF * 0.2 - 每个通道 5 步。
第四个选项:使用 HSV。很容易理解(观看图像,将色调从 0 旋转到 360,将饱和度和值从 0 更改为 100)如何操作参数以获得不同的颜色:
//Very simple demo, where I'm only rotating Hue
var step:uint = 15;
var position:uint = 0;
var colors:Array = [];
for (; position < 360; position += step) {
colors.push(HSVtoRGB(position, 100, 100));
}
//Visualisation for demo
var i:uint, len:uint = colors.length, size:uint = 40, shape:Shape, posX:uint, posY:uint;
for (i; i < len; ++i) {
shape = new Shape();
shape.graphics.beginFill(colors[i]);
shape.graphics.drawRect(0, 0, size, size);
addChild(shape);
shape.x = posX;
shape.y = posY;
posX += size;
if (posX + size >= stage.stageWidth) {
posX = 0;
posY += size;
}
}
public function HSVtoRGB(h:Number, s:Number, v:Number):uint {
var r:Number = 0;
var g:Number = 0;
var b:Number = 0;
var tempS:Number = s / 100;
var tempV:Number = v / 100;
var hi:int = Math.floor(h / 60) % 6;
var f:Number = h / 60 - Math.floor(h / 60);
var p:Number = (tempV * (1 - tempS));
var q:Number = (tempV * (1 - f * tempS));
var t:Number = (tempV * (1 - (1 - f) * tempS));
switch (hi) {
case 0:
r = tempV;
g = t;
b = p;
break;
case 1:
r = q;
g = tempV;
b = p;
break;
case 2:
r = p;
g = tempV;
b = t;
break;
case 3:
r = p;
g = q;
b = tempV;
break;
case 4:
r = t;
g = p;
b = tempV;
break;
case 5:
r = tempV;
g = p;
b = q;
break;
}
return (Math.round(r * 255) << 16 | Math.round(g * 255) << 8 | Math.round(b * 255));
}
最后一个,如果您想像专业人士一样完成这项任务,this wiki article 可能会对您有所帮助。