设置RGB值并将其与另一个值进行比较

时间:2015-04-09 12:56:05

标签: javascript rgb phaser-framework

我正在使用Phaser作为框架,JavaScript和语言进行自上而下的赛车游戏。我希望能够分辨出两种颜色之间的差异,这样如果汽车离开赛道,我可以让它变慢。到目前为止,我对此特定问题有以下代码:

    var currentMatCol = bmd.getPixelRGB(Math.round(car1.x), Math.round(car1.y));
    var roadMatCol = RGB(0, 0, 0);

第一行获取汽车所用颜色的RGB值,黑色或白色。第二行是我挣扎的地方。我知道道路颜色是黑色的,所以当汽车不在0 0 0时,我想放慢速度,就像它在草地或沙地上一样。

正如我所说的黑色赛道,背景为白色。我已经打印出上面的行以查看它显示的内容,第一行是正确的并显示了我想要的内容,但第二行没有。

在此之后我有一个if语句,看起来像是:

    if (currentMatCol == roadMatCol)
    {
      //do nothing
    }
    else
    {
      //set speed to very slow
    }

非常感谢任何帮助。如果我没有很好地解释这一点,我很难道歉,如果没有表现出来就很难解释。

1 个答案:

答案 0 :(得分:0)

getPixelRGB返回一个对象,其中组件颜色作为属性(以及其他数据)

请参阅http://phaser.io/docs/2.2.2/Phaser.BitmapData.html#getPixelRGB

查看文档似乎没有函数RGB,但您可以轻松地构建“颜色”对象

roadMatCol = {r: 0, g: 0, b: 0};

当然你不能直接比较两个对象,但你必须分别比较颜色成分。

所以你的代码将成为:

var currentMatCol = bmd.getPixelRGB(Math.round(car1.x), Math.round(car1.y));
var roadMatCol = {r: 0, g: 0, b: 0};

if( currentMatCol.r == roadMatCol.r &&
    currentMatCol.g == roadMatCol.g &&
    currentMatCol.b == roadMatCol.b )
{
  //do nothing
}
else
{
  //set speed to very slow
}

在比较两种颜色c1 c2时,你需要访问它们的颜色成分r,g,b(假设它们在RGB颜色空间中表示)。


作为最后一点,我认为通过检查汽车的位置而不是查看背景颜色,你可以更好地解决问题(汽车上路或越野)。