我正在处理一块使用SDL的C代码,它应该用黑白像素填充屏幕......它使用for循环填充屏幕和一个随机数来决定每个像素是黑色还是白色。
它开始按原样工作一秒钟,但它会慢慢开始显示越来越多的白色像素,直到屏幕完全变白并保持这种状态。我不明白我在这里做错了什么。我让它在控制台中打印数字,并且它继续显示随机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 :(得分:5)
两个问题:
pixelRGBA(screen, x, y, 0, 0, 0, 0);
RGBA表示您拥有alpha,并且您已将Alpha设置为透明,因此它不会渲染任何黑色像素。进行alpha混合时,像素将乘以alpha,现有像素乘以倒数,并添加两个像素。因此,如果alpha为零,则不会获得任何新像素和所有现有像素。
另外,你的循环是&lt; =而不仅仅是&lt;,所以你绘制的像素太多了。
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);
}
}
}
答案 1 :(得分:4)
在一种情况下,您将使颜色完全不透明,而另一种情况则完全透明。虽然RGB值确实应该在一种情况下为0而在另一种情况下应为255,但我认为Alpha应该对于两种情况都相同。