3

刚刚在 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 种色调创建的所有组合填充数组,但我不明白|符号代表什么。他在视频中提到他在之前的视频中谈到过它,但他没有,我检查过,我确信他误解了他的解释&|因为他确实触及&了一点操作,但从未|提及他以前的任何视频。我不明白的另一件事是为什么我们要改变颜色。他在视频中解释了它,但对我来说仍然没有意义。基本上他所说的只是我们改变它,因为bb, gg, 和rr都有 2 和 8 位数据,但这不足以作为我的解释。我需要知道我们为什么要这样做,为什么我们需要向左移动只是因为bb, gg,rr颜色中有 2^8 位的数据,以及首先有 2^8 位的数据意味着什么?

4

1 回答 1

9

|java中是按位或运算符:按位运算 没有看整个视频,我猜他正在尝试做的是将所有颜色值(RGB)放入一个32Bit整数中。由于 rr,gg,bb 只能有 0-255 的值,只需要 8 位,他可以通过移位和或操作将它们放入一个变量中。例如:

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

所以现在我们在一个整数变量中拥有所有三种颜色值。

于 2013-02-09T21:13:43.360 回答