将SDL_Surface*初始化为函数

将SDL_Surface*初始化为函数,c,sdl,sdl-1.2,C,Sdl,Sdl 1.2,我想将所有SDL_曲面初始化为一个函数,以获得尽可能清晰的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.

我想将所有SDL_曲面初始化为一个函数,以获得尽可能清晰的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");
}
setImages(mur, caisse, caisseOk, menu, objectif);
SDL_BlitSurface(menu, NULL, screen,&posMenu);
SDL_Flip(screen);
大体上是这样说的:

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");
}
setImages(mur, caisse, caisseOk, menu, objectif);
SDL_BlitSurface(menu, NULL, screen,&posMenu);
SDL_Flip(screen);
我测试过,IMG_负载工作正常,但它似乎没有在函数外部初始化我的SDL_曲面。 有办法做到这一点吗?我想一定有一种方法可以正确初始化我的SDL_表面的主

同样,如果我将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);
    }
}

没有什么会让我出错,但似乎什么都没有发生。我在网上发现的唯一一件事就是“你为什么要这样做?这没用”。是这样吗?

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

类似于
setImages(&mur,&caisse,&caisseOk,&menu,&objectif)?我试过了,但我得到了“无法将参数“1”的'SDL_Surface**'转换为'SDL_Surface*”到'void setImages(SDL_Surface*,SDL_Surface*,SDL_Surface*,SDL_Surface*,SDL_Surface*),我还试过
setImages(*mur,*caisse,*caisseOk,*menu,*objectif)但它也不起作用。@SoJJu我想你忘了更改函数定义。我在你更新答案时写了这条评论,我们太同步了;)我试过了,就像你说的,代码构建得很好,但仍然没有显示图像。。。我一定是在别的地方出了错。不管怎样,谢谢你的提示,我想在将来它会非常有用!好的,它成功了,只是错过了我暂停程序并让他打印屏幕的循环:)再次感谢,祝你愉快。