gpt4 book ai didi

c - 将 SDL_Surface* 初始化为函数

转载 作者:行者123 更新时间:2023-11-30 15:26:04 28 4
gpt4 key购买 nike

我想将所有 SDL_Surface 初始化为一个函数,以便拥有最清晰的 main 可能,但它似乎不起作用。我这样做是这样的:

void setImages(SDL_Surface* mur, SDL_Surface* caisse, SDL_Surface* caisseOk, SDL_Surface* menu, SDL_Surface* objectif)
{
mur = IMG_Load("images\\mur.jpg");
caisse = IMG_Load("images\\caisse.jpg");
caisseOk = IMG_Load("images\\caisse_ok.jpg");
menu = IMG_Load("images\\menu.jpg");
objectif = IMG_Load("images\\objectif.png");
}

并在 main 中这样调用它:

setImages(mur, caisse, caisseOk, menu, objectif);
SDL_BlitSurface(menu, NULL, screen,&posMenu);
SDL_Flip(screen);

我测试过,IMG_Load 工作正常,但它似乎没有在函数之外初始化我的 SDL_Surface。有没有办法做到这一点 ?我想一定有一种方法可以在主程序之外正确初始化我的所有 SDL_Surface...

同样,如果我将 SDL_Init() 和 SDL_SetVideoMode() 放入函数中,我猜我的屏幕也不会初始化?这是我的功能:

void initVideo(SDL_Surface* screen)
{
if(SDL_Init(SDL_INIT_VIDEO) <0)
{
fprintf(stderr,"Erreur lors de l'initialisation video : %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}

screen = SDL_SetVideoMode(640,420,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
if(screen == NULL)
{
fprintf(stderr,"Erreur lors de la configuration video : %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
}

我对 main 的调用:

SDL_Surface *screen = NULL, *menu = NULL, *marioH = NULL, *marioD = NULL, *marioB = NULL, *marioG = NULL,
*caisse = NULL, *caisseOk = NULL, *objectif = NULL, *mur = NULL;

SDL_Rect posMenu, posMario;

initVideo(screen);

没有任何信息向我发送错误,但似乎什么也没有发生。我在网上找到的唯一信息是“你为什么要这样做?这是没有用的”。是这样吗?

最佳答案

C 使用按值传递来传递函数参数。

看来,您的 setImages() 函数更改了参数指针本身。

setImages()函数中,您可以更改传递的指针所指向的,而不是指针本身。返回后,在 main() 中,您的指针保持不变[未初始化,如果在调用之前]。

要实现所需的功能,您需要从 main() 传递一个指向这些指针的指针 [这些指针的地址] >.

例如,您可以将 setImages() 函数更改为

void setImages(SDL_Surface** mur, SDL_Surface** caisse, SDL_Surface** caisseOk, SDL_Surface** menu, SDL_Surface** objectif)
{
//put some NULL check for sanity

*mur = IMG_Load("images\\mur.jpg");
*caisse = IMG_Load("images\\caisse.jpg");
.
.
}

并从 main() 调用,例如

setImages(&mur, &caisse, &caisseOk, &menu, &objectif);

关于c - 将 SDL_Surface* 初始化为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522492/

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