关于在iOS下使用SDL的问题,求教

刚开始接触SDL,自己找了些教程看了下,然后根据官方给的demo打包了一个静态库,自己试了下,发现根本没法显示任何的内容,希望有用过的大神们指点一下,是哪里写错了

#include "SDL.h"
#include<stdio.h>

int main(int argc, char *argv[])
{
    /* 创建窗口 */
    SDL_Window *win = NULL;
    /* 创建渲染器 */
    SDL_Renderer *renderer = NULL;
    /* 创建绘画表面 */
    SDL_Texture *HelloTex = NULL;
    /* 创建加载表面 */
    SDL_Surface *Surface = NULL;
    
    /* 使用SDL前先初始化 */
    if (SDL_Init(SDL_INIT_VIDEO/* | SDL_INIT_AUDIO */) < 0)
    {
        printf("Unable to initialize SDL");
    }

//    
    int landscape = 1;
    int modes = SDL_GetNumDisplayModes(0);
    int sx = 0, sy = 0;
    for (int i = 0; i < modes; i++)
    {
        SDL_DisplayMode mode;
        SDL_GetDisplayMode(0, i, &mode);
        if (landscape ? mode.w > sx : mode.h > sy)
        {
            sx = mode.w;
            sy = mode.h;
        }
    }
    
    printf("picked: %d %d\n", sx, sy);

    /* 设置窗口 */
    win = SDL_CreateWindow("fred",
                           0, 0,
                           sy, sx,
                           SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS);
;
    /* 设置渲染器 */
    renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
    /* 加载图片 */
    Surface = SDL_LoadBMP("space.bmp");
    /* 从表面创建画图表面 */
    HelloTex = SDL_CreateTextureFromSurface(renderer, Surface);
    /* 释放表面 */
    SDL_FreeSurface(Surface);
    /* 清理渲染器 */
    SDL_RenderClear(renderer);
    /* 复制绘图后的表面至渲染器 */
    SDL_RenderCopy(renderer, HelloTex, NULL, NULL);
    SDL_RenderPresent(renderer);
    /* 暂停2000毫秒 */
    SDL_Delay(2000);
    /* 销毁绘画表面 */ SDL_DestroyTexture(HelloTex);
    /* 销毁渲染器 */ SDL_DestroyRenderer(renderer);
    /*销毁窗口*/
    SDL_DestroyWindow(win);
    /*退出*/
    SDL_Quit();
    return 0;
}

图片我是直接放在了项目文件里

阅读 5.3k
2 个回答

自己折腾了好久,下面是正确的姿势,然后还在研究画线,有用过SDL的大神求指点求鞭挞,不要怜惜我是一朵娇花

static SDL_Texture *texture = 0;
///更新界面
void render(SDL_Renderer *renderer) {
    /* fill background in with black */
    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer, texture, NULL, NULL);
    /* update screen */
    SDL_RenderPresent(renderer);
}
///初始化纹理
void initializeTexture(SDL_Renderer *renderer) {
    SDL_Surface *bmp_surface;
    /* load the bmp */
    bmp_surface = SDL_LoadBMP("space.bmp");
    if (bmp_surface == NULL) {
        fatalError("could not load bmp");
    }
    texture = SDL_CreateTextureFromSurface(renderer, bmp_surface);
    if (texture == 0) {
        fatalError("could not create texture");
    }
    SDL_SetColorKey(bmp_surface, 1,
                    SDL_MapRGB(bmp_surface->format, 0, 0, 255));
    SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
    /* free up allocated memory */
    SDL_FreeSurface(bmp_surface);
}

void loadBMP(void) {
    SDL_Window *window;
    SDL_Renderer *renderer;
    
    /* 初始化 SDL */
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        fatalError("Could not initialize SDL");
    }
    /* 创建window */
    window = SDL_CreateWindow("加载背景图", 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,
                              SDL_WINDOW_OPENGL |
                              SDL_WINDOW_BORDERLESS);

    /* 设置渲染器 */
    renderer = SDL_CreateRenderer(window, -1, 0);
    
    initializeTexture(renderer);
    
    int done = 0;
    while (!done) {
        SDL_Event event;
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                done = 1;
            }
        }
        render(renderer);
        SDL_Delay(1000);
    }
    /* cleanup */
    SDL_DestroyTexture(texture);
    /* shutdown SDL */
    SDL_Quit();
}
新手上路,请多包涵

请问你是用什么打包SDL静态库的,安照官方文档的做法,打包会提示gcc不能用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题