在java游戏中实现白天/黑夜(光明/黑暗)

在java游戏中实现白天/黑夜(光明/黑暗),java,game-physics,Java,Game Physics,我目前正在用java开发一个游戏,以达到娱乐和教育的目的。这是一个基于2d瓷砖的游戏。渲染是通过rgb值逐像素进行的。 我目前没有使用任何库/游戏引擎 然而,我遇到的问题超出了我对java编程的基本知识。我打算添加一个昼夜循环,但意识到我不知道如何在游戏中添加灯光。 我认为调整rgb值可能是一种选择,但我不知道这是否可行或如何实现 那么,是否有可能在没有引擎或库的情况下为游戏添加照明/黑暗(如果有,那么如何实现) 如果要使用RGB值绘制单个像素,将其变暗的简单方法是创建一个排序过滤器 通过将颜色

我目前正在用java开发一个游戏,以达到娱乐和教育的目的。这是一个基于2d瓷砖的游戏。渲染是通过rgb值逐像素进行的。 我目前没有使用任何库/游戏引擎

然而,我遇到的问题超出了我对java编程的基本知识。我打算添加一个昼夜循环,但意识到我不知道如何在游戏中添加灯光。 我认为调整rgb值可能是一种选择,但我不知道这是否可行或如何实现


那么,是否有可能在没有引擎或库的情况下为游戏添加照明/黑暗(如果有,那么如何实现)

如果要使用RGB值绘制单个像素,将其变暗的简单方法是创建一个排序过滤器

通过将颜色的rgb值乘以常数,可以缩放颜色的“亮度”。暗颜色小于1,亮颜色大于1


因此,如果您有明亮的红色(240,10,10),您可以通过将所有RGB组件乘以0.5,得到较深的红色(120,5,5),使其成为“夜间模式”。如果在RGB颜色选择器中查找这些值,可以看到它们是相同的颜色,只是色调不同

看看RGB颜色模型:

总之,您有三个颜色通道(红色、绿色、蓝色),每个颜色通道值越高,颜色越亮

因此,您可以通过分离颜色通道、将其值减少一定量并将通道重新组合为RGB来创建较暗的颜色:

public static int muchDarker(int rgb) {
    int r = (rgb >> 16) & 255;   // red
    int g = (rgb >> 8) & 255;    // green
    int b = rgb & 255;           // blue
    // now reduce brightness of all channels to 1/3
    r /= 3;
    g /= 3;
    b /= 3;
    // recombine channels and return
    return (r << 16) | (g << 8) | b;
}
publicstaticintmuchdarker(intrgb){
int r=(rgb>>16)&255;//红色
int g=(rgb>>8)&255;//绿色
int b=rgb&255;//蓝色
//现在将所有通道的亮度降低到1/3
r/=3;
g/=3;
b/=3;
//渠道重组与回报

return(r)我们不提供库建议。以后,请忽略你问题的这一部分。好的。谢谢,我没有意识到。如果这只是一个粗略的逐像素(我认为是老式的8位)主题游戏,那么我只会让白天的天蓝色(有太阳)和晚上的黑色(有星星)这正是我想要的!谢谢!@user3449125,那是什么,你不必自己编写的代码?@NathanTempelman我不知道有能力拆分值(或如何操作),从而使图像变暗。编写10行代码不是问题。