我正在使用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
}
非常感谢任何帮助。如果我没有很好地解释这一点,我很难道歉,如果没有表现出来就很难解释。
答案 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颜色空间中表示)。
作为最后一点,我认为通过检查汽车的位置而不是查看背景颜色,你可以更好地解决问题(汽车上路或越野)。