java - 这个颜色生成代码中的 "&"和 "|"有什么用?

标签 java colors 2d-games

刚刚在 YouTube 上偶然发现 designsbyzephy 的 2d 游戏开发视频系列,并决定学习和理解视频中的代码将是我的下一个 Java 学习冒险。

最大的障碍是尝试自己破译代码,因为视频制作者采用一种非常不友好的新手方式来解释所有内容。

这是我的问题和视频

视频:http://www.youtube.com/watch?v=7eotyB7oNHE

5:31,他输入代码

int index = 0;
    for (int r = 0; r < 6; r++){
        for (int g = 0; g < 6; g++){
            for (int b = 0; b < 6; b++){

                int rr = (r * 255/5);
                int gg = (g * 255/5);
                int bb = (b * 255/5);

                colors[index++] = rr << 16 | gg << 8 | bb;
            }
        }
    }
colors[index++] = rr << 16 | gg << 8 | bb;

根据我的理解,他用每种颜色的 6 种色调创建的所有组合填充数组,但我不明白 | 符号代表什么。他在视频中提到他在之前的视频中谈到过它,但他没有,我查了一下,我确信他误会了他对 &| 的解释,因为他确实略微谈到了 & 操作,但在他以前的任何视频中都没有提到 | 。我不明白的另一件事是我们为什么要改变颜色。他在视频中解释了它,但它对我来说仍然没有意义。基本上他说的是我们移动它,因为 bbggrr 都有 2&8 位数据,但事实并非如此足以作为我的解释。我需要知道我们为什么这样做,为什么我们需要向左移动只是因为 bbggrr 颜色有其中有 2^8 位数据,首先有 2^8 位数据意味着什么?

最佳答案

java中的|就是位或运算符:Bitwise operations 没有看整个视频,我猜他想做的是 所有颜色值 (RGB) 转换为一个 32 位整数。因为 rr,gg,bb 只能有值 从0到255,只需要8bits,他可以通过移位和/或操作将它们放入一个变量中。例如:

rr:       00000000 00000000 00000000 10101010
rr<<16:   00000000 10101010 00000000 00000000

gg:       00000000 00000000 00000000 11110000
gg<<8:    00000000 00000000 11110000 00000000

bb:       00000000 00000000 00000000 00001111

value = rr << 16 | gg << 8 | bb 

rr<<16:   00000000 10101010 00000000 00000000
gg<<8:    00000000 00000000 11110000 00000000
bb:       00000000 00000000 00000000 00001111

value:    00000000 10101010 11110000 00001111
                      ^        ^        ^
                      rr       gg       bb

所以现在我们将所有三种颜色值都放在一个整型变量中。

关于java - 这个颜色生成代码中的 "&"和 "|"有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791416/

相关文章:

java - 以编程方式配置 glassfish 身份验证的两个领域

r - 更改直方图中的调色板

swift - 如何按角度移动 SpriteNode?

PHP int 到唯一的 rgb 颜色

python - 我将如何修复 pygame 的按键事件不执行任何操作?

c# - Unity - 当玻璃杯满时进入下一个级别

java - 键盘文字转语音

java - 为什么 Vector 和 HashTable 被广泛认为应该被弃用?

java - 如何调试部署在Weblogic上的EJB

windows - cygwin 终端颜色在 sshing 时褪色