将SDL_Surface*初始化为函数
我想将所有SDL_曲面初始化为一个函数,以获得尽可能清晰的main,但它似乎不起作用。 我是这样做的:将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.
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我想你忘了更改函数定义。我在你更新答案时写了这条评论,我们太同步了;)我试过了,就像你说的,代码构建得很好,但仍然没有显示图像。。。我一定是在别的地方出了错。不管怎样,谢谢你的提示,我想在将来它会非常有用!好的,它成功了,只是错过了我暂停程序并让他打印屏幕的循环:)再次感谢,祝你愉快。