gpt4 book ai didi

c - 我试图在一个函数中初始化一个 SDL_Window,但它总是失败,除非我定义 SDL_Window*win;作为全局变量

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

我试图在一个函数中初始化一个 SDL_Window,但它总是失败,除非我定义 SDL_Window*win;作为全局变量。这是代码:

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

#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
SDL_Surface*Init(SDL_Window*win,char*title,int x,int y,int w,int h,Uint32 flags);

int main(int argc,char**argv){
SDL_Surface *screen=NULL;
SDL_Window*win=NULL;

screen=Init(win,"SDL_Test",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_SHOWN);

SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0xFF,0x00,0x00));
SDL_UpdateWindowSurface(win);
SDL_Delay(2000);


}

SDL_Surface*Init(SDL_Window*win,
char*title,
int x,
int y,
int w,
int h,
Uint32 flags){
SDL_Surface*temp=NULL;

if(SDL_Init(SDL_INIT_EVERYTHING)){
printf("\nError : %s",SDL_GetError());
SDL_ClearError();
return NULL;
}
win=SDL_CreateWindow(title,x,6,w,h,flags);

if(!win){
printf("\nError: %s",SDL_GetError());
SDL_ClearError();
return NULL;
}
temp=SDL_GetWindowSurface(win);
if(!temp){
printf("\nError: %s",SDL_GetError());
SDL_ClearError();
return NULL;
}
return temp;
}

如果我将 SDL_Window*win 声明为全局变量,它会显示一个红色屏幕(它应该如此),但是如果我在 main() 中定义 SDL_Window*win 并将其传递给 Init() 它显示白屏(错误?)。

最佳答案

您没有在主函数中更新 win。在 c 中,您按值传递变量,如果您更改指针的值(或在您的情况下为 win),则更改不会发生在函数外部。

最短(但不是最好)的解决方案是返回窗口指针 win然后使用 SDL_GetWindowSurface(win) 获取表面

关于c - 我试图在一个函数中初始化一个 SDL_Window,但它总是失败,除非我定义 SDL_Window*win;作为全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641761/

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