3

偶然、designsbyzephy による YouTube の 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つの色合いによって作成されたすべての組み合わせで配列を埋めていますが、私が得られないのはシンボルが何を表しているかです. 彼は以前のビデオでそれについて話しているとビデオで言及していますが、彼はそうでは&ありませ|&.|彼の以前のビデオのいずれか。私が理解できないもう 1 つのことは、なぜ色を変えているのかということです。彼はビデオでそれを説明していますが、それでも私には意味がありません。基本的に彼が言うのはbb、 、gg、およびrrすべてに 2 & 8 ビットのデータが含まれていますが、それでは説明が不十分です。なぜそれを行っているのか、なぜbb, gg,rr色に 2^8 ビットのデータが含まれているという理由だけで左にシフトする必要があるのか​​、また 2^8 ビットのデータを持つことはそもそも何を意味するのかを知る必要があります。 ?

4

1 に答える 1

9

in Javaは|bitwise or operator: Bitwise operations ビデオ全体を見なくても、彼がやろうとしているのは、すべての色の値 (RGB) を 1 つの 32 ビット整数に入れることだと思います。rr,gg,bb は 0 ~ 255 の値しか持てないため、8 ビットしか必要としないため、シフトおよびまたは演算を使用して、それらを 1 つの変数に入れることができます。例えば:

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

これで、3 つの色の値すべてが 1 つの整数変数に含まれるようになりました。

于 2013-02-09T21:13:43.360 に答える