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

Set an RGB value and compare it another

我正在制作一款自上而下的赛车游戏,使用 Phaser 作为框架并使用 JavaScript 和语言。我希望能够分辨两种颜色之间的区别,这样,如果汽车偏离轨道,我可以让它减速。到目前为止,我有以下针对此特定问题的代码:

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

第一行获取汽车颜色(黑色或白色)的 RGB 值。第二行是我挣扎的地方。我知道道路颜色是黑色的,所以当车子不在rgb 0 0 0的时候,我想让它慢下来,就好像在草地上或者沙子上一样。

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

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

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

如有任何帮助,我们将不胜感激。抱歉,如果我没有解释清楚,不展示就很难解释。

getPixelRGB returns 以组件颜色作为属性(以及其他数据)的对象

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

查看文档似乎没有函数 RGB 但您可以轻松构建 "color" 对象

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 颜色表示 space ).


最后一点,我认为通过检查汽车的位置而不是查看背景颜色来解决问题(汽车是公路还是越野)可能会更好。