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