2011-04-22 85 views
2

我正在从斯坦福大学的iTunes U讲座(仍然很漂亮的绿色)开始工作,并且遇到了咆哮。我试图为不同的彩色砖块设定一个点值,这样我就可以计算出一个分数,但是我的if似乎不起作用。我有一种感觉,getColor()没有返回我认为它的值;我创建了一个状态标签来显示它返回的内容,但我仍然无法弄清楚如何测试。这很可能是我错过了一些简单的事情,或者还不知道。测试颜色是否等于

这里是该片的片段我工作:

if (collider != null && collider != paddle) { 
     remove(scoreLabel); 
     vy = -vy; 
     Color brickColor = collider.getColor(); 
     add(new GLabel("" + collider.getColor(), 10, 12)); 
     double temp = brickVal(brickColor) * scoreMultiplier; 
     score += Math.abs(temp); 
     addScoreboard(); 
     remove(collider); 
    } 
} 

private double brickVal(Color c) { 
    if (c.equals(Color.RED)) { 
     return 10.0; 
    } else if (c == Color.ORANGE) { 
     return brickVal = 8.0; 
    } else if (c == Color.YELLOW) { 
     return brickVal = 6.0; 
    } else if (c == Color.GREEN) { 
     return brickVal = 4.0; 
    } else if (Color.CYAN.equals(c)) { 
     return brickVal = 2.0; 
    } else if (c == Color.MAGENTA) { 
     return brickVal = 1.0; 
    } else { 
     return 1.0; 
    } 
} 

如果您需要完整的代码,让我知道。

回答

6

如果您的情况与c == Color.X类似,请使用Color.X.equals(c)。您正在测试对象是否是相同的实例,而不是如果它们被认为是彼此相等的。

你也可以使用c.equals(Color.X)像你这样为Color.RED,但很多人喜欢的另一种方式,以防止一个NullPointerException对于其中cnull情况。

+0

谢谢。我还发现我的问题的一部分是我的scoreMultiplier是0. * facepalm * – 2011-04-23 00:32:14

+0

并且使用==作为比较是合法的,因为所有颜色定义都是静态的。对象没有区别。等号方法只是比较颜色的RGB内容,但应该可以工作。 – Vetsin 2011-04-23 00:35:46

+0

只要被比较的Color对象与相同的静态实例相反,只要'=='可以。然而,如果被比较的“颜色”对象来自其他地方,那么这将是一个问题。可能在这种情况下,你是对的,没关系。这听起来像乘以0可能是一个更大的问题:) – WhiteFang34 2011-04-23 00:40:48