我有一份学校作业,部分原因是当猫与狗发生碰撞时,猫会刮伤狗,狗会改变颜色。由于我的老师告诉我们,我使用了颜色变量(即dogs[i].setColor(Color.GRAY);
),我想在每次划伤时为狗添加约20种红色。例如,它从(128, 128, 128)
开始,然后在1 {0}之后,它将是(148, 128, 128)
,在max (5)
之后它将是(228, 128, 128)
。我在网上看到的一些东西显示了如何做到这一点但我见过的所有颜色系统都使用了我老师告诉我们使用的颜色系统。感谢您的时间,我希望很快能收到您的回复!
答案 0 :(得分:0)
如果你只是需要稍微改变颜色,我建议使用darket方法:
dogs[i].setColor(dogs[i].getColor().darker());
否则:
Color oldColor = dogs[i].getColor();
dogs[i].setColor(new Color(Math.max(0, oldColor.getRed()-10), oldColor.getGreen(), oldColor.getBlue());
答案 1 :(得分:0)
您是否尝试设置变量来代替最初从128开始的r值?类似的东西:
int RedValue = 128;
然后在碰撞时,用那个地方的变量重新着色狗:
RedValue += 20;
(第一次碰撞:RedValue = 148,然后是168,直到228.)
if(RedValue >= 228){ return; }
Color c = new Color(RedValue, 128, 128)
dogs[i].setColor(c);
我希望这有帮助,我主要使用JavaFX对所有应用程序进行编程,所以如果这不是您正在寻找的,或者不可能,我很抱歉。但是在JavaFX中它很简单。我制作了一个程序,在点击时更改圆圈的颜色,直到r值达到228.然后我意识到这个问题与JavaFX无关。但也许它可以给你一些想法,
<强> JavaFX的:强>
初始化:
private static int RedIncrements = 128;
程序:
Shape c = new Circle(30,30,30);
root.setCenter(c);
c.setFill(Color.rgb(128, 128, 128));
c.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
if(RedIncrements==228){
return;
}
RedIncrements += 20;
c.setFill(Color.rgb(RedIncrements, 128, 128));
}
});
链接到完整代码:http://pastebin.com/guk0150p