gpt4 book ai didi

Ubuntu 中的 C 和 SDL 未按预期工作

转载 作者:行者123 更新时间:2023-11-30 15:23:45 25 4
gpt4 key购买 nike

我正在关注 Youtube 上的教程,但当我尝试时它并没有按预期工作。

代码如下:

#include <stdio.h>
#include <SDL2/SDL.h>

void start(SDL_Window* window, SDL_Renderer* renderer)
{
SDL_Init(SDL_INIT_EVERYTHING);
window = SDL_CreateWindow("Hello", 200, 200, 200, 200, 0);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

SDL_Rect rect = {220, 140, 200, 200};
SDL_RenderFillRect(renderer, &rect);
}

void stop(SDL_Window* window, SDL_Renderer* renderer)
{
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
}

int main(int argc, char **argv)
{
SDL_Window* window;
SDL_Renderer* renderer;

start(window, renderer);
SDL_Delay(5000);
stop(window, renderer);

return 0;
}

它应该在窗口中间创建一个白色矩形,并用蓝色填充其余部分,但当我运行它时,这种情况不会发生。相反,它“捕获其下的程序的图片”,例如背景。为什么会发生这种情况,我该如何解决?

最佳答案

您有两个问题需要解决。首先,您需要修改您的start()函数接受指向指针的指针,而不仅仅是指针,这样windowrenderer main() 中的变量可以修改...否则,windowrenderer start()内会有效,但是main()中对应的指针变量不会被更改并且将保持未初始化状态。所以...

/* Use 'SDL_Window**' and 'SDL_Renderer**' instead of 'SDL_Window*' and
* 'SDL_Renderer*', and dereference once during use (eg. '*window'
* instead of 'window' */
void start(SDL_Window** window, SDL_Renderer** renderer)
{
SDL_Init(SDL_INIT_EVERYTHING);
*window = SDL_CreateWindow("Hello", 200, 200, 200, 200, 0);
*renderer = SDL_CreateRenderer(*window, -1, SDL_RENDERER_ACCELERATED);

SDL_SetRenderDrawColor(*renderer, 0, 0, 255, 255);
SDL_RenderClear(*renderer);
SDL_SetRenderDrawColor(*renderer, 255, 255, 255, 255);

SDL_Rect rect = {220, 140, 200, 200};
SDL_RenderFillRect(*renderer, &rect);
}

然后在 main()使用:

    start(&window, &renderer); /* pass addresses, not values */

第二个问题是完成绘图操作后需要更新屏幕。您可以使用SDL_RenderPresent()来做到这一点当你在完成绘图,例如 main()调用您的start()后立即功能:

...
start(&window, &renderer);
SDL_RenderPresent(renderer); /* add this */
SDL_Delay(5000);
...

您可能还想更改 SDL_Rect 中的值这样它就不会绘制在窗口之外。

关于Ubuntu 中的 C 和 SDL 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661574/

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