1

Brainsteelによって解決されました。以下のコードは修正され、動作するようになりました。 ウィンドウの幅: 640、ウィンドウの高さ: 480

関数の呼び出し順序: Start()

ループ()

Stop() (ループが 0 を返さない場合、1 を返す前に Stop を呼び出すため、現在コメントされています)

構造:

#define MAX_IMAGES 50

struct ImageStructure{
    SDL_Surface* Texture;
    int x;
    int y;
};

ImageStructure Image[MAX_IMAGES]; //All Image Textures are set to NULL by default in the start function
SDL_Event Event;
SDL_Surface* Screen = NULL;

次に、Start 関数です。すべてのセットアップ コードを消去しました

int Program::Start(){
    for(int id = 0; id < MAX_IMAGES; id++){
        Image[id].Texture = NULL;
        Image[id].x = 0;
        Image[id].y = 0;
    }

    if(LoadIMG(1, 0, 0) != 0){
        return 1;
    }

    if(PrintText(2, "Hello World", 10, 310) != 0){
        return 2;
    }

    return 0;
}

ループ機能。すべてのイベント コードを消去

int Program::Loop(){
    while(Event.type != SDL_QUIT){

        for(int id = 0; id < MAX_IMAGES; id++){
            if(Image[id].Texture != NULL){
                if(ShowIMG(id) != 0){
                    return 1;
                }
            }
        }

        if(SDL_Flip(Screen) == -1){
            return 1;
        }
    }
}

LoadIMG 関数

int Program::LoadIMG(int id, int x, int y){
    SDL_Surface* loadedImage = NULL;
    switch(id){
        case 0:
            loadedImage = IMG_Load("Textures\\Icon.jpeg");
            break;
        case 1:
            loadedImage = IMG_Load("Textures\\Test.jpeg");
            break;
        default:
            return 1;
    }
    if(loadedImage != NULL){
        Image[id].Texture = SDL_DisplayFormat(loadedImage);
        Image[id].x = x;
        Image[id].y = y;
    }
    else{
        return 1;
    }
    SDL_FreeSurface(loadedImage);
    return 0;
}

ShowIMG 関数

int Program::ShowIMG(int id){
    SDL_Rect position;
    position.x = Image[id].x;
    position.y = Image[id].y;
    SDL_BlitSurface(Image[id].Texture, NULL, Screen, &position);
    return 0;
}

そして PrintText 関数

int Program::PrintText(int id, std::string Text, int x, int y){
    TTF_Font *Font = NULL;
    SDL_Color TextColor = {255, 255, 255};
    Font = TTF_OpenFont("Other\\PoseiAOE.ttf", 22);
    if(Font == NULL){
        return 1;
    }
    Image[id].Texture = TTF_RenderText_Solid(Font, Text.c_str(), TextColor);
    Image[id].x = x;
    Image[id].y = y;
    if(Image[id].Texture == NULL){
        return 1;
    }
    return 0;
}
4

0 に答える 0