2013-02-09 31 views
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色,但我沒有得到的是|符號代表的。他在視頻中提到他在前面的視頻中談到過這個問題,但他沒有,我查了一下,我確信他誤解了&|的解釋,因爲他確實觸及了&的操作,但是,從未在他以前的任何視頻中提及過|。我不明白的另一件事是我們爲什麼要改變顏色。他在視頻中解釋了這一點,但對我來說這仍然沒有意義。基本上他所說的只是我們轉移它,因爲bb,ggrr都有8位數據,但這不足以作爲我的解釋。我需要知道爲什麼我們要這樣做,爲什麼我們需要轉向左側,因爲bb,gg,, rr顏色中有2^8位的數據,以及有2^8位數據意味着什麼第一個地方?

+0

太多的問題。但是這裏有一個按位('|')運算符的解釋:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html – anthropomo 2013-02-09 21:14:05

+3

真的,大多數關於編程的視頻教程都很吸引人。實際上,我採取了這種做法 - 大多數在線教程總的來說都不錯。這甚至不一定是因爲作者本身在編程方面不好(儘管有時也是如此),但是他們通常在解釋事情方面非常糟糕,並最終大聲朗讀他們的代碼。有時候,所討論的'教程'可以概括爲'git clone some-repo'。 – Cubic 2013-02-09 21:18:14

+0

是的,所以從視頻學習非常令人沮喪,但我不知道任何其他方式可以學習2D遊戲編程。我已經使用了諸如zetcode之類的在線教程,並閱讀了有關該主題的書籍,但其中大多數看起來確實過時並且使用了糟糕的編程習慣。所以我非常困惑。我是否需要去學校學習遊戲編程? – GayLord 2013-02-11 17:44:18

回答

9

在Java中|是按位或操作:Bitwise operations 而不觀看整個視頻,我猜他正在努力做的就是把 所有顏色值(RGB)轉換成一個32位整數。由於rr,gg,bb只能從0-255的值爲 ,只需要8位,他可以通過使用shift和/或操作將它們放入一個變量中。例如:

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 

所以現在我們在一個整數變量中有所有三個顏色值。

+0

這是相當酷的想法;)+1爲好解釋 – duffy356 2013-02-09 21:19:12

+0

我愛你的男人,不知道它是那麼簡單。希望我可以代表,但我需要15個代表 – GayLord 2013-02-09 21:20:00

+0

@GayLord:我已經有1個你和Hector,現在你有16個代表。你會想要1 + Hector,並點擊他的答案旁邊的大綠色檢查大綱以「接受」它。 – 2013-02-10 01:10:07

相關問題