AS3 - RGB着色?

时间:2014-01-13 18:45:25

标签: actionscript-3 flash colors

我在AS3制作这个游戏。它是关于一个球和一个垫。使用者可以移动垫以防止球撞击地板。无论如何,我希望球将颜色改变为随机生成的颜色。所以我得到了每个颜色值的数学随机数,R G B。

var r;
var g;
var b;

function getColor(){
    r = Math.round(Math.random()*256);
    g = Math.round(Math.random()*256);
    b = Math.round(Math.random()*256);
}

但我不知道如何用RGB颜色为球着色。我甚至不知道是否可能。

2 个答案:

答案 0 :(得分:1)

这取决于您的实施。如果您是以编程方式创建球(例如)......

var ball:Shape = new Shape();
ball.graphics.beginFill(0xFFFFFF);
ball.graphics.drawCircle(0, 0, 10);
ball.graphics.endFill();

...然后您可以通过先调用ball.clear()并使用新的颜色值重新绘制更新的圆圈来轻松绘制。请注意beginFill()使用uint值,您可以使用相同的Math.random()轻松生成这些值。这是您的功能的修改版本,允许您定义低和&高价值。

function randomRange(low:Number=0, high:Number=1):Number {
    /* Returns a random number between the low and high values given. */
    return Math.floor(Math.random() * (1+high-low)) + low;
}

...此时您的beginFill()将如下所示:

ball.graphics.beginFill(randomRange(0x000000, 0xFFFFFF);

有效地检索黑白之间的随机颜色。

但是,如果要修改现有图像(例如加载的位图),则需要colorTransform()。这是我写的RGB的一个:

tintRGB(target:Object, r:Number, g:Number, b:Number, alpha:Number = 1):void {
    if (target.hasOwnProperty("transform")) {
        target.transform.colorTransform = new ColorTransform(0,0,0,alpha,r,g,b,0);
    }
}

答案 1 :(得分:1)

var r;
var g;
var b;

function getColor():uint{
    var resultColor:uint;
    r = Math.round(Math.random()*0xFF); //0xFF equivalent to 255 
    g = Math.round(Math.random()*0xFF);
    b = Math.round(Math.random()*0xFF);

    resultColor = r<<16 | g<<8 | b;
    return resultColor;
}

AS3中的颜色为0xRRGGBB格式。因此,我们使用按位运算组合3个值。 希望这可能有所帮助。请查看此信息以获取更多信息:Bit Operations in AS3