这个for循环我做错了什么?

rzr*_*scm 0 c random for-loop sdl

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

Jas*_*onD 5

两个问题:

pixelRGBA(screen, x, y, 0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

RGBA表示您具有alpha,并且您已将alpha设置为透明,因此它不会渲染任何黑色像素.进行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);
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)