我有一个程序将应用程序逻辑与图形分开。有几种配色方案,我想知道这是否是可接受的编程,或者是否有更好的方法来完成选择和绘制配色方案:
public void paintComponent(Graphics g) {
super.paintComponent(g);
colorScheme = gameLogic.getColorScheme();
for (int i = 0; i < gameLogic.getParticleArrSize(); i++) {
if (colorScheme == 0) {
setBackground(Color.WHITE);
g.setColor(gameLogic.getParticleColor(i));
g.fillOval(gameLogic.getParticleXCoor(i),
gameLogic.getParticleYCoor(i),
gameLogic.getParticleSize(i),
gameLogic.getParticleSize(i));
g.setColor(gameLogic.getCurrPartColor());
g.fillOval(mouseX - mouseOvalRadius, mouseY - mouseOvalRadius,
mouseOvalSize, mouseOvalSize);
g.setColor(gameLogic.getCursorColor());
g.fillOval(mouseX - 19, mouseY - 19, 38, 38);
} else if (colorScheme == 1) {
setBackground(Color.WHITE);
g.setColor(gameLogic.getParticleBorderColor(i));
g.fillOval(gameLogic.getParticleXCoor(i) - 3,
gameLogic.getParticleYCoor(i) - 3,
gameLogic.getParticleSize(i) + 6,
gameLogic.getParticleSize(i) + 6);
g.setColor(gameLogic.getParticleColor(i));
g.fillOval(gameLogic.getParticleXCoor(i),
gameLogic.getParticleYCoor(i),
gameLogic.getParticleSize(i),
gameLogic.getParticleSize(i));
g.setColor(gameLogic.getCurrPartColor());
g.fillOval(mouseX - mouseOvalRadius, mouseY - mouseOvalRadius,
mouseOvalSize, mouseOvalSize);
g.setColor(gameLogic.getCursorColor());
g.fillOval(mouseX - 19, mouseY - 19, 38, 38);
} else if (colorScheme == 2) {
setBackground(Color.BLACK);
g.setColor(Color.WHITE);
g.fillOval(gameLogic.getParticleXCoor(i) - 3,
gameLogic.getParticleYCoor(i) - 3,
gameLogic.getParticleSize(i) + 6,
gameLogic.getParticleSize(i) + 6);
g.setColor(gameLogic.getParticleColor(i));
g.fillOval(gameLogic.getParticleXCoor(i),
gameLogic.getParticleYCoor(i),
gameLogic.getParticleSize(i),
gameLogic.getParticleSize(i));
g.setColor(Color.WHITE);
g.fillOval(mouseX - mouseOvalRadius - 2,
mouseY - mouseOvalRadius - 2,
mouseOvalSize + 4,
mouseOvalSize + 4);
g.setColor(gameLogic.getCursorColor());
g.fillOval(mouseX - 19, mouseY - 19, 38, 38);
} else if (colorScheme == 3) {
setBackground(Color.WHITE);
g.setColor(Color.BLACK);
g.fill3DRect(gameLogic.getParticleXCoor(i) - 2,
gameLogic.getParticleYCoor(i) - 2,
gameLogic.getParticleSize(i) + 4,
gameLogic.getParticleSize(i) + 4, true);
g.setColor(gameLogic.getParticleColor(i));
g.fillRect(gameLogic.getParticleXCoor(i),
gameLogic.getParticleYCoor(i),
gameLogic.getParticleSize(i),
gameLogic.getParticleSize(i));
g.setColor(Color.BLACK);
g.fillRect(mouseX - mouseOvalRadius,
mouseY - mouseOvalRadius,
mouseOvalSize,
mouseOvalSize);
g.setColor(gameLogic.getCursorColor());
g.fillRect(mouseX - mouseOvalRadius + 7,
mouseY - mouseOvalRadius + 7,
mouseOvalSize - 14,
mouseOvalSize - 14);
}
}
}
答案 0 :(得分:1)
您应该调查LookAndFeel concept in Swing。它允许您定义不同的颜色方案,并为您提供一个框架,以确保所有组件具有相似的外观。
答案 1 :(得分:1)
您可以定义一个抽象颜色方案类,它将声明用于绘制单个游戏对象的方法(实现将使用不同的形状或颜色)。您发布的paintComponent
方法只会获取当前的颜色方案并将所有绘图委托给它。