您好我目前正在使用libgdx进行picross游戏,我在解决如何实现颜色选择方面遇到了一些问题。我不确定在按下其中一个颜色选择按钮时如何切换选择的颜色以及如何禁用先前选择的颜色。下面是我用于颜色选择按钮的I类,我目前将它们存储在一个数组中,但我不确定这是否是最好的处理方式。
我也很好奇如何正确地设置一个类,我是否需要为每个变量设置get和set方法?
非常感谢任何帮助。
由于
package PicrossGameObjects;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class ColorSelector {
int xCoord;
int yCoord;
Texture texture;
Color thisColor;
boolean isSelected;
public ColorSelector(int xCoord,int yCoord,Texture texture,boolean isSelected){
this.xCoord = xCoord;
this.yCoord = yCoord;
this.texture = texture;
this.isSelected = isSelected;
}
public void Render(SpriteBatch batch){
batch.draw(texture,xCoord,yCoord);
}
public boolean GetisSelected(){
return isSelected;
}
public void setIsSelected(boolean isSelected){
this.isSelected = isSelected;
}
}
答案 0 :(得分:0)
Getters和setter用于帮助封装您的类,以防更改变量的行为具有可能弄乱类的内部工作的副作用。或者,即使它没有,它也可以让你在不破坏任何其他类的情况下为未来的变化添加副作用。
如果布尔值打算由外部类更改,并且没有更改布尔值的副作用(如上例所示),我就不会为getter和setter打扰。我只是将布尔公开。
但是你的Color变量是一个使用setter可能有意义的例子。例如,您现在可能只想定义一组颜色可供选择,因此您可以在某处拥有一组静态变量颜色或一组颜色可供选择,您只需使用{{1 }}。但是接下来你可能会决定要允许任何可以想象的颜色,但是你不希望每次更改时都必须实例化一种新颜色并最终触发GC。所以现在你会陷入困境。您必须在使用它的所有其他课程中将您的通话更改为colorSelector.color = COLOR_RED;
,并希望您不会错过。
如果您已经开始使用setter,它将如下所示:
colorSelector.color.setColor(newColor);
然后如果您决定要允许任何传入的颜色,您可以将其更改为此而无需修改其他类:
public void setColor(Color someStaticColor){
this.color = someStaticColor;
}
现在,您可以自由地使用任何Color对象分配给ColorSelector,而不必担心输入对象稍后更改(可以重复使用而不是重新实现)。
不可否认,这是一个人为的,可能不切实际的例子,但有些情况下,当您进行更改时,这可以为您节省大量的代码重构。