2012-12-23 42 views
0

我正在一塊使用SDL那是應該填充黑色和白色像素,屏幕的C代碼...它使用一個for循環來填充屏幕和一個隨機數來決定是否每個像素是黑色或白色。我對這個循環做了什麼錯誤?

它開始工作,因爲它應該一秒鐘,但它緩慢地開始顯示越來越多的白色像素,直到屏幕完全白色,並保持這種方式。我不明白我在這裏做錯了什麼。我把它打印數NUM在控制檯並繼續表現出隨機的1和0喜歡它甚至應該同時屏幕是白色的,所以我覺得這個問題在if else語句或for循環某處。

這裏的培訓相關代碼...

/*outside main program loop*/ 
17 int x, y, num; 
18 srand(time(0)); 

/*inside main program loop*/ 
28  for(y=0;y<=480;y++) { 
29  for(x=0;x<=640;x++) { 
30   num = rand() % 2; 
31   if(num == 0) { 
32   pixelRGBA(screen, x, y, 255, 255, 255, 255); 
33   } 
34   else { 
35   pixelRGBA(screen, x, y, 0, 0, 0, 0); 
36   } 
37  } 
38  } 
39  SDL_Flip(screen); 
+0

順便說一句:'srand(時間(0));'是中世紀。如果您不需要視覺效果,請勿隨機分配。 –

回答

5

兩個問題:

pixelRGBA(screen, x, y, 0, 0, 0, 0); 

RGBA意味着你有α,以及您所設置的阿爾法透明的,所以它不會呈現任何黑色像素。當alpha混合時,像素將乘以alpha,並將現有像素乘以相反像素,並添加兩個像素。因此,如果alpha爲零,則不會獲得新像素和全部現有像素。

此外,你的循環是< =而不僅僅是<,所以你正在繪製太多的像素。

for(y=0;y<480;y++) 
{ 
    for(x=0;x<640;x++) 
    { 
     num = rand() % 2; 
     if(num == 0) { 
      pixelRGBA(screen, x, y, 255, 255, 255, 255); 
     } else { 
      pixelRGBA(screen, x, y, 0, 0, 0, 255); 
     } 
    } 
} 
4

在一種情況下,你使顏色完全不透明,另一種情況下完全透明。雖然RGB值在一種情況下應該爲0,而在另一種情況下爲255,但我認爲,對於這兩種情況,Alpha應該是相同的。

相關問題