SDL2 C 图像不显示

问题描述

我想创建一个问答游戏。作为第一个状态,我希望显示一个菜单,并且我想要这样做,就像单击图像开始而不是更改状态一样。所以问题是我的菜单图片甚至没有出现。我还有一个问题。如果为此使用 SDL_ttf 是更好的选择,我可以在其中单击文本或我可以使用图片

这是一个代码

#include <SDL.h>    
#include <stdlib.h>
#include <stdio.h>
#include <SDL_image.h>

#define SCREEN_WIDTH 640    
#define SCREEN_HEIGHT 480

SDL_Window* window = NULL;
SDL_Renderer *renderer;

static SDL_Surface *screen;
static SDL_Surface *menu;
SDL_Texture *screen_texture;

int width,height;

void draw_menu()
{
  SDL_Rect src;
  SDL_Rect dest;

  src.x = 0;
  src.y = 0;
  src.w = menu->w;
  src.h = menu->h;

  dest.x = (screen->w / 2) - (src.w / 2);
  dest.y = (screen->h / 2) - (src.h / 2);
  dest.w = menu->w;
  dest.h = menu->h;

  SDL_BlitSurface(menu,&src,screen,&dest);
}


int main(int argc,char *args[])
{
  if (initialize(SCREEN_WIDTH,SCREEN_HEIGHT,argc,args) == 1) 
{

    return 0;
 }

SDL_GetwindowSize(window,&width,&height);

int quit = 0;
int state = 0;
SDL_Event event;


  while(quit == 0) {


    while (SDL_PollEvent(&event)){
    SDL_PumpEvents();
    const Uint8 *keystate = SDL_GetKeyboardState(NULL);

    if (keystate[SDL_SCANCODE_ESCAPE]) {

        quit = 1;
    }
    if (event.type == SDL_MOUSEBUTTONDOWN)
    {
        if(event.button.button == SDL_BUTTON_LEFT){

            printf("clik\n");
        }
    }
    SDL_RenderClear(renderer);
    SDL_FillRect(screen,NULL,0x000000ff);


    if (state == 0)
    {
        draw_menu();
    }
    
    SDL_Rendercopy(renderer,screen_texture,NULL);
    SDL_RenderPresent(renderer);

  }

 }

SDL_FreeSurface(screen);
SDL_FreeSurface(menu);
SDL_DestroyRenderer(renderer);

SDL_DestroyWindow(window);

SDL_Quit();

return 0;

}

int initialize(int width,int height,int argc,char *args[]) {


if (SDL_Init(SDL_INIT_VIDEO) < 0) {

    printf("SDL Could not initialize! SDL_Error: %s\n",SDL_GetError());

    return 1;
}


SDL_CreateWindowAndRenderer(SCREEN_WIDTH,SDL_WINDOW_SHOWN,&window,&renderer);


if (window == NULL) {

    printf("Window Could not be created! SDL_Error: %s\n",SDL_GetError());

    return 1;
}

screen = SDL_CreateRGBSurfaceWithFormat(0,width,height,32,SDL_PIXELFORMAT_RGBA32);

if (screen == NULL) {

    printf("Could not create the screen surfce! SDL_Error: %s\n",SDL_GetError());

    return 1;
}

menu = IMG_Load("menu.png");
if (menu == NULL) {

    printf("Could not Load menu image! SDL_Error: %s\n",SDL_GetError());

    return 1;
}

Uint32 colorkey = SDL_MapRGB(menu->format,255,255);
SDL_SetColorKey(menu,SDL_TRUE,colorkey);



return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)