gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:05 25 4
gpt4 key购买 nike

我正在使用 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);

最佳答案

两个问题:

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

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);
}
}
}

关于c - 这个for循环我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com