1

関数で 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() に渡すと白い画面が表示されます (エラー?)。

4

1 に答える 1

0

winメイン関数で更新していません。変数を値で渡し、cポインターの値を変更した場合(またはあなたの場合は勝利した場合)、変更は関数の外部では発生しません。

最短の (しかし最善ではない) 解決策は、ウィンドウ ポインターを返しwin次にサーフェスを取得することです。SDL_GetWindowSurface(win)

于 2013-10-28T18:05:15.323 に答える