对于学校我们需要制作一款名为记忆的游戏,但我的游戏并不是很好。我已经拥有了所有卡片,他们也可以转身但我不知道你怎么能比较颜色并且如果颜色不是马赫则将卡片转回来或者如果颜色是马赫则让卡片消失。你能帮我吗?这是代码的一小部分:
d = Rectangle {
width: bind 150
height: bind 150
x: bind 500
y: bind 20
arcWidth: 20
arcHeight: 20
fill: Color.GREEN
stroke: Color.BLACK
strokeWidth: 1.0
onMouseClicked:function(a: MouseEvent)
{
if(d.fill == Color.GREEN)
d.fill = Color1.YELLOW
else
d.fill = Color.GREEN
}
}
if(Color1.equals("yellow"))
&& (Color2.equals("yellow"))
{
d.setVisible(false);
j.setVisible(false);
}
答案 0 :(得分:1)
JavaFX是部分开源(Stack Overflow reference)。在该链接中,我找到equals()
类Color
方法的源代码,版本为 2.X :
/**
* Indicates whether some other object is "equal to" this one.
* @param obj the reference object with which to compare.
* @return {@code true} if this object is equal to the {@code obj} argument; {@code false} otherwise.
*/
@Override public boolean equals(Object obj) {
if (obj == this) return true;
if (obj instanceof Color) {
Color other = (Color) obj;
return red == other.red
&& green == other.green
&& blue == other.blue
&& opacity == other.opacity;
} else return false;
}
显然,red
,green
,blue
和opacity
需要相同。
对于 1.X 版本,我只看了编译的类文件,并且有足够的信心说实现与2.X(下面的代码段)相同:
@com.sun.javafx.runtime.annotation.Public
public boolean equals(java.lang.Object arg0);
4 invokestatic javafx.lang.Builtins.isSameObject(java.lang.Object, java.lang.Object) : boolean [87]
15 instanceof javafx.scene.paint.Color [80]
18 ifeq 121
22 checkcast javafx.scene.paint.Color [80]
28 invokevirtual javafx.scene.paint.Color.get$red() : float [45]
38 invokevirtual javafx.scene.paint.Color.get$red() : float [45]
50 invokevirtual javafx.scene.paint.Color.get$green() : float [47]
60 invokevirtual javafx.scene.paint.Color.get$green() : float [47]
72 invokevirtual javafx.scene.paint.Color.get$blue() : float [48]
82 invokevirtual javafx.scene.paint.Color.get$blue() : float [48]
94 invokevirtual javafx.scene.paint.Color.get$opacity() : float [49]
104 invokevirtual javafx.scene.paint.Color.get$opacity() : float [49]
equals()
实施不从1.X更改为2.X。
如果Color1
和Color2
确实属于Color
类型,则您将它们与String
类型的对象进行比较:
if(Color1.equals("yellow")) && (Color2.equals("yellow"))
此处的比较将失败:
if (obj instanceof Color)
因此,equals()
方法将始终返回false。您应该将equals()
与另一个Color
类型的对象一起使用。